Java中的toString()方法

Posted m1m-FG

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的toString()方法相关的知识,希望对你有一定的参考价值。

一、toString()方法介绍

toString() 方法是 Object 类中的方法,toString() 方法源代码如下:

//(1)getClass().getName() 返回类的全类名(包名+类名)
//(2)Integer.toHexString(hashCode())将对象的hashCode值转成16进制字符串
public String toString() 
    return getClass().getName() + "@" + Integer.toHexString(hashCode());

Object类中的toString方法输出的结果是:

包名.类名+@+16进制的哈希值

二、改写toString()方法

由于 Object 类中的 toString() 方法并不好用,因此很多其他类中都重写了此方法。(子类对父类提供的方法不满意,所以重写以符合自己的需求)

由于toString改写的太多,已经有了固定的格式,直接generate的toString方法源代码:

  • 该改写的toString方法目的是输出对象的属性值。
  • 当直接输出一个对象时,toString方法会被默认的调用。
public String toString()    //重写后,默认一般是把对象的属性值输出
        return "Monster" +
                "name='" + name + '\\'' +
                ", job='" + job + '\\'' +
                ", sal=" + sal +
                '';

下面是例子:

package object;

public class ToString 

    public static void main(String[] args) 
        Monster monster = new Monster("小妖怪", "巡山", 1000);
        System.out.println(monster.toString());
        System.out.println(monster);
    


class Monster
    private String name;
    private String job;
    private double sal;

    public Monster(String name, String job, double sal) 
        this.name = name;
        this.job = job;
        this.sal = sal;
    

    //重写toString方法,输出对象的属性
    @Override
    public String toString()    //重写后,默认一般是把对象的属性值输出
        return "Monster" +
                "name='" + name + '\\'' +
                ", job='" + job + '\\'' +
                ", sal=" + sal +
                '';
    

输入结果如下:

Monstername='小妖怪', job='巡山', sal=1000.0

Monstername='小妖怪', job='巡山', sal=1000.0

总结:toString() 方法的作用,就像是介绍一下对象(像 monster 的属性都被说了一遍),一般子类对父类提供的 toString 都不满意,都要进行重写。

char []中的Java toString方法[重复]

【中文标题】char []中的Java toString方法[重复]【英文标题】:Java toString method in char[] [duplicate] 【发布时间】:2014-01-19 07:38:46 【问题描述】:

我以为 toString 方法会将一个 char 数组变成一个字符串,但我错了。

    char[] k=new char[2];
    k[0]='k';
    k[1]='k';
    System.out.println(k.toString());

此代码将输出:[C@112f614.

这段代码 k.toString() 究竟发生了什么?

我应该永远不要在 char 数组中调用 toString 方法吗?

谢谢!

新年快乐!

【问题讨论】:

当你输入你的问题的标题时,它会弹出几个已经回答过这个问题的现有问题,然后它们会再次列在此屏幕的右侧 数组上的 toString 正在返回数组的内存地址。这就是你所展示的 【参考方案1】:

String 可以将 char 数组作为构造函数。

String s = new String(k);

【讨论】:

What exactly happened in this code k.toString()? Should I never call toString method in a char array? 这不能回答这两个问题。 这不会编译。 为什么出于兴趣投反对票? 可能是因为我在用 python 思考并省略了 new 运算符。我的错。固定。 目前尚不清楚这是否是 OP 真正想要的,也没有回答为什么 toString() 在数组上调用时会执行其操作。【参考方案2】:

你想使用 Arrays.toString(char[]'a','b');


你可以使用

char data[] = 'a', 'b', 'c';
     String str = new String(data);

查看 javadoc

公共字符串(char[] 值) 分配一个新的字符串,以便它 表示当前包含在 字符数组参数。字符数组的内容是 复制;后续修改字符数组不影响 新创建的字符串。参数: value - 的初始值 字符串

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html

在数组上调用 toString 将调用 Object 的 toString 方法。这将返回你的 hashCode

public String toString() 返回一个字符串表示 目的。通常,toString 方法返回一个字符串 “文字地表示”这个对象。结果应该简洁但 易于阅读的信息表示。它是 建议所有子类重写此方法。 toString 类 Object 的方法返回一个包含对象名称的字符串 对象是实例的类,at-sign 字符“@”, 和哈希码的无符号十六进制表示 目的。换句话说,这个方法返回一个字符串等于 价值:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 返回:对象的字符串表示形式。

【讨论】:

What exactly happened in this code k.toString()? Should I never call toString method in a char array? 这两个问题都没有回答 这假设用户想要 "['k', 'k']" 作为输出。如果他们想要“kk”,那么他们需要使用带有 char 数组的 String 构造函数。【参考方案3】:

您应该永远不要在任何类型的数组上调用 toString。 Arrays 类有许多实用方法用于创建数组的字符串表示形式。

【讨论】:

【参考方案4】:

对这个问题的部分回答:“这段代码 k.toString() 到底发生了什么?”

toString() 继承自 java.lang.Object 并且没有被覆盖。该实现只打印规范的类名加上@字母加上哈希码。就这些。因此,调用此方法对应用程序没有用处,仅用于 IDE 中的调试目的,以至少了解存在哪种类型的对象。

【讨论】:

【参考方案5】:

这段代码 k.toString() 中究竟发生了什么?我不应该在 char 数组中调用 toString 方法吗?

char 数组的 toString 方法从 Object 继承默认的 toString 行为,即简单地打印从对象在内存中的位置派生的唯一标识符。因此,除非您想要那个唯一标识符,否则调用 k.toString() 没有多大意义。 (k 是你的 char 数组)

【讨论】:

【参考方案6】:

因为数组是对象。所以调用toString()结果调用继承自对象类的toString()方法是:

public String toString() 
    return getClass().getName() + "@" + Integer.toHexString(hashCode());

[C@112f614 中,[C 表示它是一个字符数组。

如果要打印数组的内容,请使用Arrays.toString(char[] a)

【讨论】:

以上是关于Java中的toString()方法的主要内容,如果未能解决你的问题,请参考以下文章

java课堂笔记------toString方法和equals方法

Java中的toString()方法

java中的toString如何用

java toString()

Java中的 toString 方法

java中,Collection c = new ArrayList(); Collection 中的toString()方法