Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用字符串添加java类实例?_Java - Fatal编程技术网

如何用字符串添加java类实例?

如何用字符串添加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

我能理解以上的输出Product@hashcode因为
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));
}