java 有关toString对整数的行为的问题

qacovj5a  于 2023-01-01  发布在  Java
关注(0)|答案(2)|浏览(131)

为什么返回一个字符串时一个整数本身不起作用,但是在它旁边添加一个字符串时它就起作用了?它会突然像(Integer.toString())一样转换整数吗?

public class Car {
String brand;
String model;
int hp;

@Override
public String toString() {
    return hp; //this doesn't work because it wants to return int.
  //return hp + brand; does work for some reason.
  /*return Integer.toString(hp); could it be doing something like this behind 
  the scenes?*/
}}
vfh0ocws

vfh0ocws1#

根据Java语言规范:
字符串上下文仅适用于binary +运算符的一个操作数,当另一个操作数是字符串时,该操作数不是字符串。
在这些上下文中,目标类型总是String,并且总是发生非String操作数的字符串转换(参见5.1.11节)。
这意味着,当您执行hp + brand时,由于brandString,因此上述规则生效,hp转换为String,并发生连接,从而得到String

lnvxswe2

lnvxswe22#

这是因为Java处理字符串的方式。当你试图"添加"任何东西到一个字符串,它会导致一个"concatenate"操作。这里有一篇很好的文章来解释它https://www.geeksforgeeks.org/addition-and-concatenation-using-plus-operator-in-java/
例如:

int n1 = 10;
int n2 = 20;
int n3 = 30;
int n4 = 40;

// Below statement will print the sum 100 as all operands are `int` 
System.out.println(n1 + n2 + n3 + n4); 

// Introducing a string changes the behavior
System.out.println(n1 + "" + n2 + n3 + n4); // Will print 10203040 (concatenated)

另外值得注意的是,表达式是从左到右计算的。

System.out.println(n1 + n2 + "" + n3 + n4); // Will print 303040

相关问题