【Java基础】`toString()` 与 `new String()` 的区别详解

toString()new String() 的区别详解

这两个方法看起来都与字符串转换相关,但实际用途和原理完全不同。下面我用通俗易懂的方式解释它们的区别:

1. toString():对象的"自我介绍"

是什么

  • 是Java中所有对象都有的方法(继承自Object类)
  • 用于返回对象的字符串表示形式

特点

Object obj = new Object();
String str = obj.toString(); // 默认返回"类名@哈希码",如"java.lang.Object@1b6d3586"

常见用途

  1. 打印对象时自动调用:
    System.out.println(obj); // 实际调用obj.toString()
    
  2. 字符串拼接时自动调用:
    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. 最佳实践建议

  1. 优先使用toString()

    • 当需要对象的字符串表示时
    • 特别是在日志输出、字符串拼接时
  2. 谨慎使用new String()

    • 只有当确实需要新建字符串对象时才使用
    • 大多数情况下直接使用字符串字面量更高效
  3. 重要注意

    // 不必要的新建对象(浪费内存)
    String s = new String("不变的字符串"); 
    
    // 更好方式
    String s = "不变的字符串";
    

总结

  • toString()获取对象的文字描述,所有对象都有这个方法
  • new String()专门创建字符串对象的方法
  • 日常开发中toString()使用频率更高
  • new String()在需要复制或保护原字符串不被修改时有用

记住这个简单类比:

  • toString() - 问对象"请用文字描述你自己"
  • new String() - 说"我要做一个新的字符串标本"
posted @ 2025-05-30 19:09  佛祖让我来巡山  阅读(110)  评论(0)    收藏  举报

佛祖让我来巡山博客站 - 创建于 2018-08-15

开发工程师个人站,内容主要是网站开发方面的技术文章,大部分来自学习或工作,部分来源于网络,希望对大家有所帮助。

Bootstrap中文网