我有一个班级:
class Employee{...}
然后:
Employee aEmployee = new Employee(...);
int i = 10;
String str = aEmployee + i;
编译时会生成错误,为什么?
修改:
我没有覆盖toString()
类中的Employee
方法,但如果我尝试这样做:
Employee aEmployee = new Employee(...);
String h = "hello";
String str = aEmployee + h;
这次编辑和运行都很好。
那么:将int
变量i
更改为String
变量h
后,为什么会这样?
答案 0 :(得分:4)
Employee
不是String
,无法使用+
运算符连接。
事实上,在Java中,没有运算符重载这样的东西(除了一些被语言覆盖的内容之外,String
就是一个很好的例子)。
答案 1 :(得分:4)
aEmployee
不是String
,而是Object
。
在不知道你的Employee
对象是如何设置的情况下,为你提供合适的解决方案是困难的,但是......
String str = aEmployee.toString() + i;
会阻止编译器抱怨,但可能无法提供您期望的结果。
您最好尝试使用Employee
String str = aEmployee.aMethodThatReturnsString() + i;
答案 2 :(得分:1)
可能是
String str = aEmployee.EName + i;
其中EName是Employee Class的属性,类型为string
答案 3 :(得分:0)
Employee aEmployee = new Employee(...);
aEmployee
是类型员工的对象引用变量,指向堆上的员工对象。
String str = aEmployee + i;
在上面的语句中,您尝试连接字符串和对象引用变量。
尝试这样做.....
String str = aEmployee.toString() + i;
如果您在Employee类中有未覆盖 toString()
方法,那么您将得到类似这样的内容,getClass().getName()@hashCode + i
答案 4 :(得分:0)
Employee aEmployee = new Employee(...);
aEmployee是一个对象引用而不是String。所以你不能连接它。
组合你需要将对象转换为toString()然后可以连接。
答案 5 :(得分:0)
因为aEmployee
是Employee
类的对象,所以该对象不属于String类。如果你需要与字符串连接,你必须使用.toString()
方法。
String str = aEmployee.toString() + i;
答案 6 :(得分:0)
第一个示例无法编译的原因是+
运算符的性质。在Java中,+
是一个重载运算符,其含义取决于左右操作数子表达式的静态类型。
如果两个操作数都是基本数字类型(或它们的包装类型),则运算符是数字加法。
如果其中一个或两个操作数都是字符串,则运算符是字符串连接。
如果上述两种情况都不成立,则未定义运算符 - 编译错误。
在您的第一个示例中,Employee
既不是字符串也不是数字,i
也不是字符串,因此+
运算符没有意义。
在第二个示例中,您已将第二个操作数更改为String,因此操作符现在被识别为字符串连接。事实上,Java将其视为等同于:
String str = aEmployee.toString() + h;
作为必然结果,您可以通过将第一个示例编译为:
来进行编译 String str = aEmployee.toString() + i;