2011-11-15 1 views
55

인터뷰에서이 질문에 부딪 혔고 해결 방법을 찾지 못했습니다. 나는 그 반대도 같이 표시 할 수 있습니다 알아 What does the "+=" operator do in Java?x + y가 컴파일 오류를 나타내며 x = x + y가 아닌 x와 y를 어떻게 선언합니까?

그래서 질문은 아래와 같습니다.

..... x = .....; 
..... y = .....; 

x += y; //compile error 
x = x + y; //works properly 
+0

이상하게도 자바는 더하기 기호로 연결을 허용합니까? 나는 자바를 모른다. 그러나 그럴 가능성이있는 것 같다. – Ben

+0

@ mazzzzz는 방금 테스트했는데, 여기 해결책이 아닌 것 같다. + = 두 문자열을 연결하는 데 잘 작동합니다. – mcfinnigan

+104

쓸모없는 인터뷰 질문. –

답변

55

(들) 객체, 문자열이 작동하지만 컴파일러는

연산자 + =이 인수 유형에 대한 정의되지 않은 말한다 이유는이 코드

Object x = 1; 
String y = ""; 

x += y; //compile error 
x = x + y; //works properly 

완전히 확실하지 시도

두 번째 줄의 경우 toString은 ca 개체에 lled.

편집 :

+= 운영자가 일반 객체에 의미이기 때문에 그것은 의미가 있습니다. 내 예제에서 나는 객체에 int를 캐스팅,하지만 그것은 단지 Object 형식의 x 존재에 따라 달라집니다 x 비록 객체 인 경우에만 작동

Object x = new Object(); 

, 그래서 실제로 문자열이 직접 것이 더욱 생각 Object의 서브 클래스 이 x + y 실패합니다 :

Foo x = new Foo(); 

을 나는 시도 다른 유형.

+0

실례합니다. – DJClayworth

+1

고맙습니다. 나는 이클립스에서 해봤 다. 그러나 NetBeans에서는 오류없이 컴파일된다는 것을 알게되었습니다. 그래서, 그것은 일반적인 문제는 아니지만 컴파일러에 달려 있다는 것을 의미합니까? – knshn

+6

x가 Object이고 y가 String 인 경우 x + = y를 컴파일해야합니다. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7058838 – x22

3

불가능합니다.

X x = ...; 
Y y = ...; 

x += y;   //1 
//equivalent to 
x = (X) (x+y); //2 

x = x+y;  //3 

x+y의 종류 Z. # 2는 Z의 X에 캐스팅 변환을 필요로 가정하자; # 3은 Z에서 X로 할당 전환이 필요합니다. '주조 전환은 할당 전환보다 포괄적입니다'(1). 따라서 # 3이 합법적 인 한 # 2는 합법적이고 # 1은 합법적입니다.

뒷면에

, 1 법적 것이 가능하지만, # 3이 정보는 전혀 유용하지 예

byte x = 0; 
    int y = 1; 
    x+=y;  // ok, x=(byte)(x+y), cast int to byte is allowed. 
    x = x+y; // error, assign int to byte 

대한 불법이고; Java가 이러한 놀라운 차이를 만드는 결함입니다.

(1) http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.5

+4

@Craigy의 대답을 볼 수도 있습니다. –

2
int i = 5; 
String s = "a"; 
System.out.println(i+=s); //Error 
System.out.println(i+s); // No error 

는 기본적으로 모든 개체 또는 문자열이 아닌 원시 및 문자열 조합을 사용할 수 있습니다.

어떤 회사인지 궁금합니다.:)

+0

두 번째 경우에는 'i = i + s'를 사용하여 컴파일 오류가 발생하여'int '로 변환되는 동안 문자열로 변환되기 때문에 여기에는 실제로 해당 사항이 없습니다. – Craigy

1

이 같은 smoething 수행하는 경우 항상 컴파일 오류가 당신에게

를 제공하지 않습니다 이건 :

class A{ 
public static void main(String args[]){ 
    String x = "10"; 
    String y = "s"; 
    x += y; 
    System.out.println(x); 
} 
} 

그것은 당신이 할 경우에도 미세

작동합니다

class A{ 
public static void main(String args[]){ 
    int x = 10; 
    float y = 11.5F; 
    x += y; 
    System.out.println(x); 
} 
} 

제대로 작동합니다. 이 컴파일 실패 이러한 경우

class X{ 
} 
class A{ 
public static void main(String args[]){ 
    X x = new X(); 
    float y = 11.5F; 
    x += y; 
    System.out.println(x); 
} 
} 

:

은 그러나 당신은 x와 같은 변수 y를 두 개의 서로 다른 형식을 취합니다.

* String을 사용하여 int, float 등을 concatinate 할 수도 있습니다.

+0

하지만이 경우'x + y'도 실패 할뿐 아니라'x + = y'도 실패합니다. – nikhil