比较==与equals
==号的用法
String s1 = new String("Hello Java"); //在堆空间创建对象
String s2 = "Hello Java"; // 在常量池中创建
System.out.println(s1 == s2); //fasle
注意==比较的是两个数组的地址。
-
如果new的String,则会在堆空间创建对象
-
如果是直接赋值,在常量池创建。
-
两个String直接赋值结果?
String s2 = "Hello Java"; // 在常量池中创建
String s3 = "Hello Java";
System.out.println(s2 == s3); //ture
从结果表明:如果直接赋值String的方式,创建的对象在常量池中,会从中查找是否有相同字符串,有则直接拿来。
String s3 = "Hello " + "Java";
String s4 = "Hello Java";
System.out.println(s3==s4);//true
结论:用+号链接字符串时,编译会比较连接后的字符串。故结果true
String s1 = "Hello Java"; //在堆空间创建对象
String s4 = s2+"Java";
System.out.println(s1 == s4);//fasle
结论:当有变量进行连接字符串时,相同字符串会在new一个,故为false
String s1 = "Hello Java"; //在堆空间创建对象
String s5 = s2.concat("Java");
System.out.println(s1 == s5);//fasle
结论:当使用concat连接时,会new一个对象,故false
equals的用法
equals方法比较的是两个字符串的值。
String s = "Hello";
String s2 = "Hello";
System.out.println(s == s2);//true