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中,Collection c = new ArrayList(); Collection 中的toString()方法