Arrays.toString()和new String
1. Arrays.toString(arr)
解释:把数组内容以字符串形式打印出来,不是将数组修改为字符串
结合字节流写入进行讲解
String str = "abc";
byte[] arr = str.getBytes();
System.out.println(Arrays.toString(arr));
- 字节流根据字母对应的ACII码,将abc转换成97 98 99
- 再同过getByetes()方法,将字符串转换成字节数组[97,98,99]
- 最后调用工具类Arrays中的方法toString(arr),将传入的字节数组以字符串的格式打印出来,"[97,98,99]"
- 控制台输出[97,98,99]
- 将数组以字符串的形式打印出来指的是将数组完整地打印出来,而不是将数组的内容转换成字符串,不是把97,98,99转换成"97,98,99"或者"a,b,c"
- 数组的内容不会被改变,仅仅是将数组打印出来,正常情况下打印数组内容需要通过索引获取数组的元素,还需要手加上[],而调用方法toString(),就无需进行以上操作。
2. new String()
解释:new String() 是 Java 中创建字符串对象的语法
1. 核心作用
在 Java 堆内存中,创建一个全新的 String 对象。
- 两种创建字符串的区别(最重要)
Java 里有两种创建字符串的方式,作用完全不同:
① 最常用:直接赋值
String s1 = "hello";
- 存在字符串常量池里
- 相同内容只会创建一个对象
- 效率高、省内存
② 用 new String ()
String s2 = new String("hello");
- 一定在堆内存创建新对象
- 哪怕内容一样,也会创建新对象
- == 比较会返回 false
3. 关键结论
String a = "abc";
String b = "abc";
String c = new String("abc");
String d = new String("abc");
System.out.println(a == b); // true (同一个常量)
System.out.println(c == d); // false (两个不同对象
)
- == 比较地址
- equals() 比较内容
所以:
只要内容相同,equals 一定为 true;但 new String () 出来的对象地址一定不同。
- new String () 到底什么时候用?
99% 的情况不需要用,直接写 "字符串" 更好。
只有一种特殊场景会用:
想强制在堆里创建一个独立对象,避免复用常量池里的字符串。
5. 一句话总结
new String() 的作用:
✅ 强制在堆内存创建一个新的字符串对象
✅ 不会使用常量池
✅ 相同内容也会产生不同对象
总结
- new String() = 在堆里新建字符串对象
- "xxx" = 用常量池,高效复用
- 比较字符串内容必须用 equals()
- 日常开发优先用 "xxx",不要随便用 new String ()
浙公网安备 33010602011771号