由于手机打字比较慢,就直接上图了。为什么obj输出后变成了Test2string@de6ced,obj不应该是null吗,因为并没有构造方法啊
Test2string@de6ced这个输出是obj的地址,如果你想得到对象的话,就必须重写toString方法
因为你的test2string没有重写toString
所以用的是Object的tostring,计算的是hash与类名
Object的tostring是下面这个:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
希望能帮到你...
我也刚学不久 只是说下个人的看法哈
obj是Test2String 的一个对象 Object类是基类,每个类都直接或间接的继承它
Test2String也默认继承自Object类,在Object类中定义了toString()方法 ,这个方法输出了对象的基本信息
所以你只用写obj,就算省略后面的.toString() 它也会默认调用Object 里面的方法 返回来的是对象所属类名@对象的哈希值(用16进制表示)
你可以去查询API 文档哈
看源码, public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
而题目obj在输出之前已经有new了一个对象赋值给它,Test2String又没有重写toString,顾obj.toString()调用的是object定义的方法,即对象引用在内存中的地址Test2string@de6ced
public static String valueOf(Object obj)
```方法的返回:如果参数为 null,则字符串等于 "null";否则,返回 obj.toString() 的值,
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Java 默认带一个无参的构造方法, 你new了一个实例obj,打印obj就是打印该对象的地址
Test2String是这个类的类型,后面的乱码是对象实例存储的哈希值16进制形式