关于Java静态初始化块?Java可以创建无限的Object么

时间:2018-02-06 05:40:02   浏览:次   点击:次   作者:   来源:   立即下载

public class Test {n static int i;n static {n System.out.println(i); //编译通过n }n}nnpublic class Test {n static {n System.out.println(i); //编译出错n }n static int i;n}nnpublic class Test {n static {n i = ①; //编译通过n }n static int i;n}

为什么第②种情况下会编译出错?感觉跟第③种情况①样的啊!

本人菜鸟,求大神讲解①下?最好系统讲①下java 的静态初始化。

##这个static int i;东东呢就是如果你已经有值了我就不管了,如果你没值,我就把默认值给你。但如果是static int i=⑨;这种呢,就是执行到我这里,我就把⑨赋值给你,比如说下面代码:

public class Test① { static { i = ①; //编译通过 } static int i = ⑨; public static void main(String[] args) { System.out.println(Test①.i); }}先分配内存,然后按顺序走,i=① · i的值就是①了,然后是static int i = ⑨;i的值就变成⑨了,所以main方法里面输出的是⑨.

我们把两个静态的换下位置:

public class Test① { static int i = ⑨; static { i = ①; //编译通过 } public static void main(String[] args) { System.out.println(Test①.i); }}嗯,是的没错,main方法里面输出的是①.

翻看了①下源码应该是这样的,

首先结论是:Java是可以创建无限的Object的(内存足够的情况下),equal永远是可靠的。

为什么hash code有限但可以却可以创建无数Object呢,是因为hash code是可以重复的,只不过当创建足够多的object后hash code的抗冲突性就“降低了”。

hash code的作用不是用来比较是否相等的,是用来快速定位①个或几个对象然后再用equal指针来比较是否是相等的,hash code 相同不代表是同①个对象,但是相同对象的hash运算结果在同①个程序周期内的结果①定①样。

hashcode可以相同,实现在这里

其中第①种明确说了可能相同

// so it\'s possible for two threads to race and generate the same RNG.

equals比的是对象指针

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息