- 均直接赋值
String s = "123";
String str = "123";
System.out.println(s==str);true
System.out.println(s.equals(str));true
//二者均指向常量池中对象,地址和值均相等
- new和直接赋值的区别
String s = "123";//常量池中创建一个“123”对象
String str = new String("123");//常量池和堆中各创建一个“123”对象,并指向堆中对象
System.out.println(s==str);false// == 比较的是引用地址
System.out.println(s.equals(str));true// String类重写了equals方法,对二者的value进行比较
- String和StringBuffer
String s = "123";
StringBuffer str = new StringBuffer("123");
System.out.println(s==str);//二者变量类型不同,无法==比较,编译错误
System.out.println(s.equals(str));false//str不是String的实例,直接return false
System.out.println(s.equals(str.toString()));true//转化为String类型,对值比较