==与equals()的区别

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方法后,首先会比较它的地址,弱地址不相等 然后再比较值