关于字符串以及字符串拼接问题
#判断两个字符串值是否是相同
代码如下(示例):
String s1="abc";
String s2="abc";
System.out.println(s1.equals(s2)); //1
System.out.println(s1==s2);//2
//输出结果如何?
/*1:是true String实质是Jdk默认的类,用equals进行判断时s1=s2的,会出现true,当你重新定义类时,定义带参的构造方法时,创建两个参数相同方法时,用equals进行判断时会出现false,这是你需要重写equals中的方法(具体参考API开发手册)。
//2:是true,s1,s2属于常量,当你定义常量s1时,会在常量池中出现定义的s1的值,而s2直接复用s1不会在创建常量值。
示例图如下:
2.用String 创建新的对象
代码如下(示例):
String s3=new String("abc");
String s4=new String("abc");
System.out.println(s3.equals(s4));//3
System.out.println(s3==s4);//4
//3的原理同上1,
//4.为false,因为new 是创建了新的对象。然而这两个新的对象在堆中分别占用不了不同的地址,地址不同,所以为false
图如下
三.拼接问题
String s5="ab"+"c";
String s6="ab";
String s7=s6+"c";
System.out.println(s5==s7);//5.false
System.out.println(s6==s5);//6.false
5.s5是直接创建“abc”,s7为先在常量池中创建“ab”,然后再创建"c",两者进行拼接组成s7,拼接期间在编译期间就完成了,拼接完成后的结果还是一个字符串对象。所以两个不相等
6.s6与s5的值不一样,所以为false
图如下