首页 > 编程语言 >Java String.valueOf 和 toString的区别

Java String.valueOf 和 toString的区别

时间:2024-10-11 19:48:55浏览次数:10  
标签:Java String 对象 valueOf toString obj null

String.valueOf()toString() 都是 Java 中用于获取字符串表示的方法,但它们的使用场景和实现方式有所不同。以下是它们之间的主要区别:

1. 方法来源

  • String.valueOf(Object obj)

    • String 类的静态方法,接受一个对象作为参数。
    • 如果传入的对象为 null,它会返回字符串 "null"
  • toString()

    • Object 类的方法,所有 Java 类都继承自 Object,因此每个对象都有这个方法。
    • 默认实现返回对象的类名和其哈希码(例如,ClassName@HashCode),通常需要在自定义类中重写这个方法以返回更具意义的字符串。

2. 处理 null

  • String.valueOf()

    • 可以安全地处理 null 值,返回字符串 "null"
    • 示例: java
    • String str = String.valueOf(null); // 返回 "null"
      
  • toString()

    • 如果调用 toString() 方法的对象为 null,将抛出 NullPointerException
    • 示例: java
    • Object obj = null;
      String str = obj.toString(); // 抛出 NullPointerException
      

3. 使用场景

  • String.valueOf()

    • 常用于需要将任意对象转换为字符串时,特别是在不确定对象是否为 null 的情况下。
  • toString()

    • 通常在自定义对象的上下文中使用,以便提供该对象的合理字符串表示,通常在调试或日志输出时使用。

示例代码

java
public class Example {
    public static void main(String[] args) {
        Object obj = null;

        // 使用 String.valueOf()
        System.out.println(String.valueOf(obj)); // 输出 "null"

        // 使用 toString()
        try {
            System.out.println(obj.toString()); // 会抛出 NullPointerException
        } catch (NullPointerException e) {
            System.out.println("Caught NullPointerException");
        }

        // 自定义对象
        MyClass myObj = new MyClass();
        System.out.println(myObj); // 调用 myObj.toString(),前提是重写了该方法
    }
}

class MyClass {
    @Override
    public String toString() {
        return "This is MyClass";
    }
}

总结

  • 使用 String.valueOf() 时,它能够安全地处理 null,并且是将对象转换为字符串的推荐方式。
  • 使用 toString() 方法时,确保对象不是 null,并重写该方法以提供合适的字符串表示。

标签:Java,String,对象,valueOf,toString,obj,null
From: https://www.cnblogs.com/starfish29/p/18459156

相关文章

  • JavaScript的内置对象有哪些?
    一、内置对象1、概念​JavaScript中的对象共分为3种:自定义对象、浏览器对象和内置对象。之前我们自己创建的对象都属于自定义对象,而内置对象又称为API,是指JavaScript语言自己封装的一些对象,用来提供一些常用的基本功能,来帮助我们提高开发速度,例如:数学-Math、日期-Date......
  • Java中反射的机制
    反射目录反射反射的概念反射的作用反射的原理直接使用类使用反射总结什么情况下使用反射反射的优缺点反射是否真的会让你的程序性能降低?反射的概念反射(Reflection)是Java的一种特性,它可以让程序在运行时获取自身的信息,并且动态地操作类或对象的属性、方法和构造器等。通过反......
  • JVM系列1:深入分析Java虚拟机堆和栈及OutOfMemory异常产生原因
    JVM系列1:深入分析Java虚拟机堆和栈及OutOfMemory异常产生原因前言JVM系列文章如无特殊说明,一些特性均是基于HotSpot虚拟机和JDK1.8版本讲述。下面这张图我想对于每个学习Java的人来说再熟悉不过了,这就是整个JDK的关系图: 从上图我们可以看到,JavaVirtualMachine位于最底......
  • [Java原创精品]基于Springboot+Vue的仿小红书博客论坛系统,社交媒体平台,含DFA敏感词过
    项目提供:完整源码+数据库sql文件+数据库表对应Excel文件项目获取看主......
  • java算法OJ(2)链表
    目录1.前言2.正文2.1合并俩个有序链表2.1.1题目描述2.1.2示例2.1.3代码2.2俩数相加2.2.1题目描述2.2.2示例2.2.3代码2.3分割链表2.3.1题目描述2.3.2示例2.3.3代码3.小结1.前言哈喽大家好吖,今天来对先前学习的链表进行巩固,做几道算法题,如果大家有更加优良的......
  • Java中的专有名词——JVM、JRE、JDK到底是什么关系
            相信刚开始学习Java的同学一定见过“JVM、JDK、JRE”这三个专有名词,那他们到底代表的是什么,三者之间又有何种关系呢?        下面我们先来介绍一下三者:1.JVM    JVM:Java虚拟机(JavaVirtualMachine,JVM)是运行Java字节码的虚拟机。JVM有......
  • 【信创问题】解决东方通(TongWeb)报错 java.lang.NoClassDefFoundError: javax/persis
    写在前边今天帮现场同事定位问题,情况是项目同事使用东方通(TongWeb7.0)部署公司项目时,出现以下报错导致服务启动失败。简单排查了下发现:war包内WEB-INF/lib/javax.persistence-api-2.2.jar中包含javax.persistence.spi.PersistenceProvider这个接口,不应该报这个错误呀。Causedby......
  • Java基础语法-类型转换
    类型转换由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。低------------------------->高byte,short,char->int->long->float->double运算中,不同类型的数据先转化为同一类型,然后再进行运算。强制转换(类型)变量名高-低自动转换低-高inti=128;......
  • 使用JNA在java中调用rust函数
    JNA是sun公司对JNI能力的封装,更多信息请自行问AI。咱们直接上代码。调用系统本地库先引入jar包:<!--https://mvnrepository.com/artifact/net.java.dev.jna/jna--><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId>......
  • java+vue计算机毕设工作计划统计分析系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今快节奏的商业环境中,企业的高效运作离不开精细化的管理与规划。随着企业规模的扩大,部门间协作的复杂性、员工工作计划的多样性以及项目进度的动......