- 均直接赋值
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类型,对值比较
本文深入探讨了Java中String与StringBuffer的区别,包括它们的内存分配方式、对象比较方法及如何正确使用equals与==进行字符串比较。同时,通过代码示例展示了new关键字与直接赋值在创建字符串对象时的不同行为。
859

被折叠的 条评论
为什么被折叠?



