public class Test_1 {
public static void main(String[] args){
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.print(s2);
System.out.println(s2 == "ab");
System.out.print(s3);
System.out.println(s3 == "ab");
}
}
运行结果是:
ab false
ab true
为什么比较后第一个是false,第二个是true啊?而且S2,S3都是“ab”啊?
public static void main(String[] args){
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.print(s2);
System.out.println(s2 == "ab");
System.out.print(s3);
System.out.println(s3 == "ab");
}
}
运行结果是:
ab false
ab true
为什么比较后第一个是false,第二个是true啊?而且S2,S3都是“ab”啊?
不是同一个对象,要比较值相等, 用 equals
String s2 = s1 + "b";
String s3 = "a" + "b";
我觉得 S2 = S1+"b" 是用了S1的引用和 b进行连接了而引用也是一个Object所以S2显示出来的是ab但是它是一个a的引用和b 连起来的一个字符串而 s3 ="a"+"b" 是字符串相加所以 生成的S3对象也就是ab ==是判断对象是否相等 所以第一个false 第二个true
而equles 就是 ==
public boolean equls(object o){
this==o;
retrun true;
}
String s1=new String("abc");
String s2=new String("abc");
if(s1==s2){
System.out.println("ok");
}else{
System.out.println("no");
}
s1在栈区,指向一个堆区的对象,"abc"在常量池
建议lz好好看一下Object类的所有方法。