有关java中值存储的问题
【代码】Integer integer = new Integer(47);
int integer1 = 47;
System.out.println(integer == integer1); //true
Integer integer2 = new Integer(47);
Integer integer3 = new Integer(47);
System.out.println(integer2 == integer3); //false
【问题】
如上所述,对象的存储是在堆中,
第二个示例中两个都new了对象,所以引用地址不同,为false;那第一个示例中两个不在同一个存储区域,相比较为什么为true?难道跨区域比软了?
现在对值的存储有点迷茫了,求各位指点迷津...
存储 java 对象 --------------------编程问答-------------------- 对象的值比较 使用对象的equal方法 --------------------编程问答-------------------- Number类会自动封箱和拆箱。所以会相等 --------------------编程问答--------------------
Boolean和Character也有同样的效果。 --------------------编程问答-------------------- 那我应该说:八种基本类都会自动封箱和拆箱。 --------------------编程问答-------------------- 我觉得这种真心没必要多纠结了,懂了==和equals区别大多数情况就行了,要深入了解需要看虚拟机方面的东西 --------------------编程问答-------------------- ==:
比较的是一个对象在内存中的地址值,比如2个字符串对象String s1 = new String("str");String s2 = new String("str");如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。
equals:
对值的比较 --------------------编程问答-------------------- 应该都是相等的,Integer比较时会拆箱 --------------------编程问答-------------------- 个人感觉就是值比对和地址比对的问题,很好理解的。 --------------------编程问答--------------------
要想了解更深入,可以看看《深入理解JVM》的书,这里对JVM的原理讲解比较深入 --------------------编程问答-------------------- 你可以这样理解
Integer integer = new Integer(47);
创建两个对象
1.new Integer();
2.定义一个integer变量,Integer integer=47;
--------------------编程问答-------------------- JDK1.5版本及以上的版本,会对基础类型的封装类型自动拆装箱的。
补充:Java , Java EE