为何重写toString时单独返回int报错,与String拼接却可行?
Java中toString方法里int与String拼接的底层逻辑
直接返回hp报错的原因很明确:toString()方法要求返回String类型,但hp是int类型,类型不匹配,编译器直接拒绝。
而hp + brand能正常运行,确实是底层自动做了类型转换,和你猜想的Integer.toString(hp)逻辑一致,具体是编译器对字符串拼接的语法糖处理:
- 当
+运算符的两个操作数中有一个是String类型时,Java会自动将另一个非String类型的操作数转为String。 - 对于
int类型的hp,编译器会调用String.valueOf(hp)(这个方法内部就是通过Integer.toString(hp)实现的),把hp转成字符串后,再和brand完成拼接。 - 你可以把
hp + brand等价理解成编译器帮你生成了这样的代码:new StringBuilder().append(hp).append(brand).toString(),而append(int)方法内部正是通过String.valueOf(int)完成类型转换的,和手动调用Integer.toString(hp)的本质完全一致。
附上你的代码示例:
public class Car { String brand; String model; int hp; @Override public String toString() { return hp; // 报错:返回类型不匹配,需要String但返回了int // return hp + brand; 正常运行,因为int被自动转为String后拼接 // return Integer.toString(hp); 手动转换,和底层自动转换逻辑一致 } }
内容的提问来源于stack exchange,提问作者Alpy
相关产品推荐
相关产品推荐

