Java 如何在这里使用这个关键字来调用toString()方法而不使用。操作人员
神奇之处在于Java 如何在这里使用这个关键字来调用toString()方法而不使用。操作人员,java,Java,神奇之处在于+操作符中的字符串。当您使用+向对象添加字符串时,JVM调用对象上的toString方法,以确定要连接的字符串 另外,this表示当前方法正在其上运行的实例,因此通过使用+操作符将this添加到字符串,可以对当前实例调用toString 从 15.18.1。字符串连接运算符+ 如果只有一个操作数表达式为String类型,则在运行时对另一个操作数执行字符串转换(§5.1.11),以生成字符串 5.1.11。字符串转换 任何类型都可以通过字符串转换转换为字符串类型 原语类型T的值x首先
+
操作符中的字符串。当您使用+
向对象添加字符串
时,JVM调用对象
上的toString
方法,以确定要连接的字符串
另外,this
表示当前方法正在其上运行的实例,因此通过使用+
操作符将this
添加到字符串
,可以对当前实例调用toString
从
15.18.1。字符串连接运算符+
如果只有一个操作数表达式为String类型,则在运行时对另一个操作数执行字符串转换(§5.1.11),以生成字符串
5.1.11。字符串转换
任何类型都可以通过字符串转换转换为字符串类型
原语类型T的值x首先转换为参考值,就像通过将其作为适当的类实例创建表达式的参数(§15.9):
- 如果T是布尔值,则使用新的布尔值(x)
- 如果T是char,则使用新字符(x)
- 如果T是byte、short或int,则使用新的整数(x)
- 如果T长,则使用新的长(x)
- 如果T为浮动,则使用新的浮动(x)
- 如果T是双精度的,则使用新的双精度(x)
然后将该引用值逐字符串转换为类型字符串
现在只需考虑参考值:
- 如果引用为null,则将其转换为字符串“null”(四个ASCII字符n、u、l、l)
- 否则,转换就好像是通过调用引用对象的toString方法(不带参数)来执行的;但是如果调用toString方法的结果为null,则使用字符串“null”
在您的情况下,第5.1.11节中的最后一点才适用。这与这件事没有任何关系。更多内容是关于+
如何处理字符串
+
运算符,当一个操作数是字符串而另一个不是字符串时,它将尝试将另一个操作数转换为字符串。例如:
public class potpie {
private int month;
private int day ;
private int year;
public potpie(int m,int d,int y) {
month=m;
day=d;
year=y;
System.out.printf("The constructor for this is"+this);
}
public String toString() {
return String.format("%d/ %d/ %d/", month,year,day);
}
}
class apples {
public static void main(String args[])
{
potpie x= new potpie(4,5,6);
}
}
它将尝试将30转换为字符串。这可以通过以下方式完成:
"My age is: " + 30
你的情况完全一样。你的表情:
"My age is: " + (new Integer(30)).toString()
+
的第二个操作数不是字符串,因此编译器尝试将该转换为字符串。因此,调用toString
:
"The constructor for this is"+this
toString
通常是将任何引用类型转换为字符串的方式。如果要将任何对象表示为字符串,toString()方法就存在了
方法返回对象的字符串表示形式
如果打印任何对象,java编译器会在内部调用该对象上的toString()方法。因此,重写toString()方法,返回所需的输出,它可以是对象的状态等。这取决于您的实现。这表示当前实例。@Meepo这不是打印:这是+为什么有这么多否决票?这实际上是一个相当合理的问题。@MauricePerry你是对的,我只是概括一下,但我错了。连接说,嘿,所有这些都应该是一个字符串,让我把它变成一个字符串。很抱歉。
"The constructor for this is"+this.toString()