如何用字符串添加java类实例?
我能理解以上的输出Product@hashcode因为如何用字符串添加java类实例?,java,Java,我能理解以上的输出Product@hashcode因为println方法在内部使用valueOf方法并将其转换为字符串 但我无法解释下面的输出行为 public class ProductTest{ public static void main(String[] args){ Product pr=new Product(); System.out.println(pr); /// Product@hashcode } } class Prod
println
方法在内部使用valueOf
方法并将其转换为字符串
但我无法解释下面的输出行为
public class ProductTest{
public static void main(String[] args){
Product pr=new Product();
System.out.println(pr); /// Product@hashcode
}
}
class Product{
}
如何将类实例和字符串文本添加到一起
我错过了什么?很简单
public class ProductTest{
public static void main(String[] args){
Product pr=new Product();
String str=pr + "something";
System.out.println(str); // Product@hashcodesomething
}
}
class Product{
}
等于
String str=pr + "something";
System.out.println(str);
默认情况下,pr.toString返回Product@hashcode
这就是为什么我们
pr.toString() + "something";
您可以更改对象的toString方法,您将看到这些更改。
---有点依赖了
默认情况下,所有类都扩展对象的toString方法,该方法等于
String str=pr + "something";
System.out.println(str);
所以当我们试图接触一根绳子时
就像前面提到的那样
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
如果更改类以覆盖toString的默认方法:
pr.toString() + "something";
输出将是
class Product{
@Override
public String toString() {
return "This is my String plus";
}
}
我希望这能澄清以下文件中规定了这一点:
如果只有一个操作数表达式是字符串类型,则在运行时对另一个操作数执行字符串转换()以生成字符串
进一步指定字符串转换,如下所示:
任何类型都可以通过字符串转换转换为字符串类型
[……]
否则,转换就像通过调用
toString
引用对象的方法,不带参数;但是如果
调用toString
方法的结果为null,然后字符串为“null”
而是使用
所以类似于pr+“something”
的东西相当于String.valueOf(pr)+“something”
请注意,我使用了
valueOf
而不是toString
,因为pr.toString()
将在pr
为null时引发异常String.valueOf()
不会。如果查看您的
This is my String plussomething
现在,如果您查看StringBuilder#append(objectobj)
ir使用String.valueOf(obj)
,它进一步调用obj.toString()
:
我认为字符串转换只有在原语类型中才有意义,谢谢。另外,请注意,如果obj不为null,string.valueOf(obj)返回obj.toString()的值,否则返回“null”文本。
@Override
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}