==操做符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存
储的数值是否相同, 要比较两个基本类型的数据或两个引用变量是否相等,只能用==操做
符。
若是一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存, 对象自己占用一块
内存( 堆内存),变量也占用一块内存,例如 Objet obj = new Object();变量 obj 是一个内存,
new Object()是另外一个内存,此时,变量 obj 所对应的内存中存储的数值就是对象占用的那
块内存的首地址。对于指向对象类型的变量,若是要比较两个变量是否指向同一个对象,即
要看这两个变量所对应的内存中的数值是否相等,这时候就须要用==操做符进行比较。
equals 方法是用于比较两个独立对象的内容是否相同,就比如去比较两我的的长相是否相
同,它比较的两个对象是独立的。
String a=new String("foo");
String b=new String("foo");
两条 new 语句建立了两个对象,而后用 a/b 这两个变量分别指向了其中一个对象,这是两
个不一样的对象,它们的首地址是不一样的,即 a 和 b 中存储的数值是不相同的,因此,表达
式 a==b 将返回 false,而这两个对象中的内容是相同的,因此,表达式 a.equals(b)将返回
true。
java
java中String是引用数据类型
1.为何String str="scce";
String str2="scce";
str==str2返回true而String str2=new String("scce"); str==str2返回falsepost
答:spa
String str="scce"; //这是在静态数据区建立了一个对象
String str2="scce"; //建立静态数据对象是先在静态数据区查,若是存在则不建立新的,保证静态数据区中的数据只有一份,
str==str2返回true //指向同一个对象
String str2=new String("scce"); str==str2返回false //在堆中建立一个对象,引用值固然不一样对象
Stirng特殊在若是静态数据区中存在,那么不建立新的对象,而是指向这个对象。blog
2.那么为何:
String str="scce";
String str2=new String("scce");
str.equals(str2)为true呢内存
答:it
由于String从新了equals方法class