【Java基础】`toString()` 与 `new String()` 的区别详解
toString() 与 new String() 的区别详解
这两个方法看起来都与字符串转换相关,但实际用途和原理完全不同。下面我用通俗易懂的方式解释它们的区别:
1. toString():对象的"自我介绍"
是什么:
- 是Java中所有对象都有的方法(继承自
Object类) - 用于返回对象的字符串表示形式
特点:
Object obj = new Object();
String str = obj.toString(); // 默认返回"类名@哈希码",如"java.lang.Object@1b6d3586"
常见用途:
- 打印对象时自动调用:
System.out.println(obj); // 实际调用obj.toString() - 字符串拼接时自动调用:
String result = "对象是:" + obj; // 自动调用obj.toString()
如何自定义:
class Person {
String name;
int age;
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
2. new String():创建字符串对象的构造方法
是什么:
- 是
String类的构造方法 - 用于创建新的字符串对象
常见构造方法:
String str1 = new String(); // 创建空字符串 ""
String str2 = new String("hello"); // 基于字符串创建
String str3 = new String(charArray); // 基于字符数组创建
String str4 = new String(byteArray); // 基于字节数组创建
3. 关键区别
| 特性 | toString() | new String() |
|---|---|---|
| 所属 | Object类的方法 | String类的构造方法 |
| 作用 | 返回对象的字符串表示 | 创建新的String对象 |
| 调用方式 | 对象实例调用:obj.toString() | 构造方法调用:new String(...) |
| 是否产生新对象 | 不一定(可能返回常量) | 总是创建新对象 |
| 主要用途 | 调试、日志、字符串拼接 | 显式创建字符串对象 |
4. 实际场景对比
场景1:已有字符串对象
String s = "hello";
// toString() - 直接返回自身
System.out.println(s.toString()); // "hello"(不会创建新对象)
// new String() - 创建新对象
System.out.println(new String(s)); // "hello"(创建新对象)
场景2:其他类型对象
Integer num = 123;
// toString() - 转换为字符串表示
System.out.println(num.toString()); // "123"
// new String() - 不能直接使用
// System.out.println(new String(num)); // 编译错误!
5. 内存角度分析
String s1 = "hello"; // 在常量池
String s2 = new String("hello"); // 在堆内存新建对象
String s3 = s2.toString(); // 返回s2本身(不会新建对象)
System.out.println(s1 == s2); // false(不同对象)
System.out.println(s1 == s3); // false
System.out.println(s2 == s3); // true(s3就是s2)
6. 最佳实践建议
-
优先使用
toString():- 当需要对象的字符串表示时
- 特别是在日志输出、字符串拼接时
-
谨慎使用
new String():- 只有当确实需要新建字符串对象时才使用
- 大多数情况下直接使用字符串字面量更高效
-
重要注意:
// 不必要的新建对象(浪费内存) String s = new String("不变的字符串"); // 更好方式 String s = "不变的字符串";
总结
toString()是获取对象的文字描述,所有对象都有这个方法new String()是专门创建字符串对象的方法- 日常开发中
toString()使用频率更高 new String()在需要复制或保护原字符串不被修改时有用
记住这个简单类比:
toString()- 问对象"请用文字描述你自己"new String()- 说"我要做一个新的字符串标本"
❤️ 如果你喜欢这篇文章,请点赞支持! 👍 同时欢迎关注我的博客,获取更多精彩内容!
本文来自博客园,作者:佛祖让我来巡山,转载请注明原文链接:https://www.cnblogs.com/sun-10387834/p/18904786

浙公网安备 33010602011771号