0

我有一堂课:

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可以了? Stringh

4

7 回答 7

4

Employee不是String, 并且不能使用+运算符连接。

事实上,在 Java 中,没有运算符重载之类的东西(除了一些融入语言的东西,String就是一个典型的例子)。

于 2012-08-29T03:01:30.913 回答
4

aEmployee不是一个String它是一个Object

在不知道您的Employee对象是如何设置的情况下,很难为您提供合适的解决方案,但是......

String str = aEmployee.toString() + i;

将阻止编译器抱怨,但可能不会给你你期望的结果。

您最好尝试使用的已知属性执行此操作Employee

String str = aEmployee.aMethodThatReturnsString() + i;
于 2012-08-29T03:01:46.177 回答
1

或许

String str = aEmployee.EName + i;

其中 EName 是 Employee Class 和 string 类型的属性

于 2012-08-29T04:18:05.470 回答
0

Employee aEmployee = new Employee(...);

aEmployeeEmployee 类型的对象引用变量,指向堆上的Employee 对象

String str = aEmployee + i;

在上面的语句中,您试图连接一个字符串和一个对象引用变量。

尝试这样做......

String str = aEmployee.toString() + i;

如果你没有重写Employee 类中的toString()方法,那么你会得到这样的东西,getClass().getName()@hashCode + i

于 2012-08-29T03:06:10.283 回答
0
Employee aEmployee = new Employee(...);

aEmployee 是一个对象引用而不是一个字符串。所以你不能连接它。

要结合,您需要将对象转换为 toString() 然后可以连接。

于 2012-08-29T03:10:05.320 回答
0

因为aEmployeeEmployee类的对象所以该对象不属于String类。如果您需要与字符串连接,则必须使用.toString()方法。

String str = aEmployee.toString() + i;
于 2012-08-29T03:51:58.787 回答
0

第一个示例无法编译的原因是+运算符的性质。在Java中,+是一个重载运算符,其含义取决于左右操作数子表达式的静态类型。

  • 如果两个操作数都是原始数字类型(或其包装类型),则运算符是数字加法。

  • 如果其中一个或两个操作数都是字符串,则运算符是字符串连接。

  • 如果以上都不是,则未定义运算符 - 编译错误。

在您的第一个示例中,Employee既不是字符串也不是数字,i也不是字符串,因此+运算符没有意义。

在第二个示例中,您已将第二个操作数更改为字符串,因此该运算符现在被识别为字符串连接。事实上,Java 将其视为等同于:

    String str = aEmployee.toString() + h;  

作为推论,您可以通过将第一个示例更改为:

    String str = aEmployee.toString() + i;  
于 2012-10-23T04:15:50.117 回答