Arrays.toString()和new String

1. Arrays.toString(arr)

解释:把数组内容以字符串形式打印出来,不是将数组修改为字符串
结合字节流写入进行讲解

String str = "abc";
byte[] arr = str.getBytes();
System.out.println(Arrays.toString(arr));
  1. 字节流根据字母对应的ACII码,将abc转换成97 98 99
  2. 再同过getByetes()方法,将字符串转换成字节数组[97,98,99]
  3. 最后调用工具类Arrays中的方法toString(arr),将传入的字节数组以字符串的格式打印出来"[97,98,99]"
  4. 控制台输出[97,98,99]
  • 将数组以字符串的形式打印出来指的是将数组完整地打印出来,而不是将数组的内容转换成字符串,不是把97,98,99转换成"97,98,99"或者"a,b,c"
  • 数组的内容不会被改变,仅仅是将数组打印出来,正常情况下打印数组内容需要通过索引获取数组的元素,还需要手加上[],而调用方法toString(),就无需进行以上操作。

2. new String()

解释:new String() 是 Java 中创建字符串对象的语法

1. 核心作用
在 Java 堆内存中,创建一个全新的 String 对象

  1. 两种创建字符串的区别(最重要)
    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 () 出来的对象地址一定不同。

  1. new String () 到底什么时候用?

99% 的情况不需要用,直接写 "字符串" 更好。
只有一种特殊场景会用:
想强制在堆里创建一个独立对象,避免复用常量池里的字符串。

5. 一句话总结

new String() 的作用:
强制在堆内存创建一个新的字符串对象
✅ 不会使用常量池
✅ 相同内容也会产生不同对象

总结

  1. new String() = 在堆里新建字符串对象
  2. "xxx" = 用常量池,高效复用
  3. 比较字符串内容必须用 equals()
  4. 日常开发优先用 "xxx",不要随便用 new String ()
posted @ 2026-05-14 23:02  ZealousMclaren  阅读(10)  评论(0)    收藏  举报