简析一下java中的String的比较
虽然这很简单,但还是让不少新手困惑。
说明一下 ==和equals 的区别。
==比较的是引用,就是地址,而equals是比较值,比较值的话,是值相同就返回true,而引用的话,值相同不一定相等,只有引用的地址相同才会相等,但是引用相同,值一定相等。
下面举例说明一下
String str= "hello";
String str1 ="hello";
Boolean b1= str==str1?true:false;
Boolean b2=srt.equals(str1)?true:false;
System.out.println(b1+ " "+b2);
结果是true ,true。
说明一下java声明String的机制,在声明过程中,没有使用new关键字的话,它会在常量池中去找,是否有hello这个字符串,如果有,那么那就会指向这个引用,也就是说不会创建新的常量,如果没找到的话才会创建一个新的常量hello ,在这里第二个字符串没有使用new关键字,且有hello字符串常量的存在,所以str1的引用和str相同
String str= "hello";
String str1 =new String("hello");
Boolean b1= str==str1?true:false;
Boolean b2=srt.equals(str1)?true:false;
System.out.println(b1+ " "+b2);
结果是false ,true
使用new关键字的话,它不管常量池中是否有hello这个字符串,会直接声明一个新的引用,分配新的地址。所以在这里str==str1返回false
本人才疏学浅,如果疑问或有不足之处都欢迎沟通。