需注意几点:
1、string是一个特殊的引用类型。对于两个字符串的比较,不管是 == 和 Equals 这两者比较的都是字符串是否相同;
2、当你创建两个string对象时,内存中的地址是不相同的,你可以赋相同的值。
所以字符串的内容相同。引用地址不一定相同,(相同内容的对象地址不一定相同),但反过来却是肯定的;
3、基本数据类型比较(string 除外) == 和 Equals 两者都是比较值;作者: 宋美涛 时间: 2015-9-10 01:43
equals和==的区别
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
(
“在堆中存储的地址是否相同”和“堆中的内容是否相同”有什么区别???总感觉是一个样的阿。。
)作者: 15173139267 时间: 2015-9-10 04:07
你需要理解的是:
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指向不同的地址。