你需要理解的是:
1: ==号,两个引用指向同一个对象的时候,才会返回真值。
栈中有个特殊性,数据可以共享。 栈中是用来存储变量的并且栈中可以存储8大基本类型的数据<字面值>。
堆中用来存放的是new创建对象和数组。
例: int a = 1; int b = 1; a==b -->返回true. a , b 是基本类型的变量, a , b 是指向int类型的引用。 ‘1’代表的是字面值<其实可以看做是对象(java编程思想:面向对象的编程)> ,关于a , b 指向的对象的值存储在栈中,栈中数据可以共享。 a 和 b 指向同一个对象‘1’,意思就是a和b指向的是同一个地址。
例:String a = new String("abc"); String b = new String("abc"); a , b是对象的引用变量 , 由new创建的对象,存放区域在堆中。每次 new 一个对象,在堆中都会重新开辟去一个空间去存放数据,意思是重新找个地址进行存储new 对象时的数据。 a == b -->返回false. a指向的对象和b指向的对象不是同一个,意思是a和b指向不同的地址。
2:equal的用法:
对于内容的比较并不准确。
在String类中重新定义了equal方法,确实是用来比较字符串(内容)的。 但是在object中仍然比较的是地址。
使用equal比较内容判断:
八大基本类型的包装类,String类型。
无法编译成功:
对于8大基本类型,编译无法通过。
比较地址:
object 和其他大部分引用对象仍然比较的还是地址。
|