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変数iString変数に変更しても問題ないのhでしょうか?

4

7 に答える 7

4

aEmployeeではありませStringObject

オブジェクトがどのようにEmployee設定されているかを知らなくても、適切なソリューションを提供するのは困難ですが...

String str = aEmployee.toString() + i;

コンパイラが文句を言うのを止めますが、期待した結果が得られない場合があります。

の既知のプロパティを使用してこのアクションを実行することをお勧めしますEmployee

String str = aEmployee.aMethodThatReturnsString() + i;
于 2012-08-29T03:01:46.177 に答える
4

Employeeは ではなく、演算子Stringを使用して連結できません。+

実際、Java では、演算子のオーバーロードのようなものはありません (言語に組み込まれているいくつかをString除けば、その典型的な例です)。

于 2012-08-29T03:01:30.913 に答える
1

多分

String str = aEmployee.EName + i;

EName は Employee クラスのプロパティであり、文字列型です

于 2012-08-29T04:18:05.470 に答える
0

Employee aEmployee = new Employee(...);

aEmployeeヒープ上のEmployeeオブジェクトを指すタイプ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

最初の例がコンパイルに失敗する理由は、+演算子の性質によるものです。Java では+オーバーロードされた演算子であり、その意味は左右のオペランド部分式の静的な型に依存します。

  • 両方のオペランドが両方ともプリミティブ数値型 (またはそのラッパー型) である場合、演算子は数値加算です。

  • いずれかまたは両方のオペランドが文字列の場合、演算子は文字列連結です。

  • 上記のいずれにも当てはまらない場合、演算子は定義されていません - コンパイル エラーです。

最初の例でEmployeeは、は文字列でも数値でiもなく、文字列でもないため、+演算子は意味がありません。

2 番目の例では、2 番目のオペランドを String に変更したため、演算子は String 連結として認識されるようになりました。実際、Java はこれを次のものと同等に扱います。

    String str = aEmployee.toString() + h;  

当然の結果として、最初の例を次のように変更してコンパイルすることもできます。

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

aEmployeeはクラスのオブジェクトであるためEmployee、オブジェクトは String クラスに属していません。文字列と連結する必要がある場合は、.toString()メソッドを使用する必要があります。

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