我们都知道String 类型存的是地址,用 "==" 进行判断的话,如果地址不一样,即使两个数的值是一样的,输出的结果也为false 。所以我们通常使用equals方法进行比较。
但是我的这一行代码却发现了一个"bug",我定义了s3和s4 两个变量,进行 "==" 比较的时候结果竟然为true?
ini
String s3 = "hello";
String s4 = "hello";
System.out.println(s3 == s4);//结果为true
System.out.println(s3.equals(s4));//结果也为true
给大家看一下正常情况 (s1-s2)
ini
String s1 = new String("hey");
String s2 = new String("hey");
System.out.println(s1 == s2);//结果为false
System.out.println(s1.equals(s2));//结果为true
对比一下。
大家看图上,想必能明显看到这两个结果也稍显不同。从图上来了解:s3和s4
该类型属于常量串直接赋值,它使用了*==*比较地址,两者的区别就在于:
s1和s2是new String赋值
常量串直接赋值导致地址直接进入了常量池中
new String赋值并没有进入常量池,两者对比起来应该是这样
所以才出现了System.out.println(s3 == s4);
结果也为true的情况。