2012-08-29 101 views
0

我有一個類:使用 「+」 組合兩個字符串

class Employee{...} 

則:

Employee aEmployee = new Employee(...); 
int i = 10; 
String str = aEmployee + i; 

它生成時,編譯A錯誤,爲什麼呢?

編輯: 我沒有覆蓋在Employee類的toString()方法,但如果我試試這個:

Employee aEmployee = new Employee(...); 
String h = "hello"; 
String str = aEmployee + h; 

這一次將被罰款,無論是編譯和運行。

所以:爲什麼在將int變量i更改爲String變量h後可以嗎?

+0

覆蓋的* Object.toString()*方法在'Employee'類中。 – adatapost

回答

4

aEmployee不是String這是一個Object

不知道你Employee對象是如何設置的,它是difficut爲您提供一個合適的解決方案,但是......

String str = aEmployee.toString() + i; 

將從抱怨阻止編譯器,但可能不會給你結果你我期待着。

你會更好試圖用的Employee

String str = aEmployee.aMethodThatReturnsString() + i; 
+0

我編輯了我的問題,可以幫我嗎?謝謝 – joshz

+0

本質上,編譯器已經查看了兩個值並決定它可以使用aEmployee的.toString()方法來連接這兩個值。這是該語言的一個特點。之前,它看待價值觀並且不能阻撓他應該如何將兩個價值加在一起 – MadProgrammer

4

Employee不是String,並且不能使用+運算符連接。

事實上,在Java中,不存在操作符重載的問題(除了少數被烘焙到語言中,String就是一個很好的例子)。

+0

+1提及操作符重載(或缺少) – MadProgrammer

0

Employee aEmployee = new Employee(...);

aEmployee已知財產執行此操作是對象參考變型員工指向員工對象在堆上。

String str = aEmployee + i;

在上面的語句你試圖連接一字符串和對象引用變量。

試試這樣做.....

String str = aEmployee.toString() + i;

如果您還沒有覆蓋toString()方法Employee類,那麼你會得到這樣的事情,getClass().getName()@hashCode + i

+0

他實際上是在將僱員簡化爲一個int –

+0

@雅這就是我的答案解釋......但我深入解釋了實際情況aEmployee是.... –

0
Employee aEmployee = new Employee(...); 

aEmployee是一個對象引用不是一個字符串。所以你不能連接它。

要結合你需要將對象轉換爲toString(),然後可以連接。

0

因爲aEmployeeEmployee類的一個對象,所以對象不屬於String類。如果你需要連接字符串,你必須使用.toString()方法。

String str = aEmployee.toString() + i; 
1

可能

String str = aEmployee.EName + i; 

其中的ename是Employee類和字符串類型的屬性

0

第一例失敗編譯的原因是因爲+的性質運營商。在Java中,+重載的運算符,其含義取決於左和右操作數子表達式的靜態類型。

  • 如果兩個操作數都是原始數值類型(或它們的包裝類型),則操作符是數字加法。

  • 如果任一個或兩個操作數都是字符串,操作者是字符串連接。

  • 如果既沒有上述的爲真時,操作者沒有定義 - 編譯錯誤。

在第一個例子中,Employee既不是字符串或數字,而i不是字符串或者,所以操作者+是沒有意義的。

在第二個例子中,你已經改變了第二個操作數爲字符串,使操作者現在被認爲是一個字符串連接。事實上,在Java將此視爲等同於:

String str = aEmployee.toString() + h; 

其必然結果是,你可能做了第一個例子,改成編譯:

String str = aEmployee.toString() + i;