String z=new String("hello");
String k=new String("hello");
System.out.println(z==k);
System.out.println(z.equals(k));
的结果是false true
而String z="hello";
String k="hello";
System.out.println(z==k);
System.out.println(z.equals(k));
的结果是true true呢?
求讲解!!
==比较的是存放内存地址是否相同
equals比较的存放的内容是否相同
==是比较基本数据类型,eq是比较应用数据类型
new会得到一块内存。而第二种则是在常量池里,而且对于相同常量只有一个,所以k是指向了"hello"。==是判断内存地址是否相同,基本类型的equals基本都被重写,不再是==.
本人认为 “==”比较的是2个对象地址: 针对网上有认为“==”在判断2个对象为相互兼容的八种基本数据类型时,比较的是其值的说法,我从内存的角度去理解它:8种基本数据类型数据是存储在栈空间的,而栈空间有“数据共享”的特性。所以此时“==”还是在判断被比较对象的地址 equals()方法在未......
答案就在这里:==与equals()的区别
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?
String z=new String("hello");
String k=new String("hello");
表示的是从堆中分别开两个地址给z和k分别存放hello.
所以==时为false,equal为true.
String z="hello";
String k="hello";
创建第一个String z="hello";会把hello存放在字符串常量区,等到
String k="hello";时直接把k指向z已经创建好的字符串常量区。
所以==时为true,equal为true
记住下面的话就行了:
== 比较的是地址
equals比较的是内容
==毕竟数据,不能比较字符串
equals能比较字符串
赞同第一个。。。。。
"=="比较数字,equals比较内容
==比较的是变量地址,equals比较是变量的内容
==比较的是存放内存地址是否相同
equals比较的存放的内容是否相同
这是个老生常谈的问题了~~
== 比较的是对象的地址
equals在没有被重写的情况下比较的也是对象的地址
String类重写了equals方法后,首先会比较它的地址,弱地址不相等 然后再比较值