使用“+”组合两个字符串

时间:2012-08-29 02:59:47

标签: java string-concatenation

我有一个班级:

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后,为什么会这样?

7 个答案:

答案 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)

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

String str = aEmployee.toString() + i;

答案 6 :(得分:0)

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

  • 如果两个操作数都是基本数字类型(或它们的包装类型),则运算符是数字加法。

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

  • 如果上述两种情况都不成立,则未定义运算符 - 编译错误。

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

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

    String str = aEmployee.toString() + h;  

作为必然结果,您可以通过将第一个示例编译为:

来进行编译
    String str = aEmployee.toString() + i;