x + = y는 컴파일 오류를 제공하고 x = x + y는 제공하지 않도록 x와 y를 어떻게 선언합니까?
나는 인터뷰에서이 질문을 만났지만 해결책을 찾지 못했습니다. Java에서 "+ ="연산자는 무엇을합니까?에 표시된대로 그 반대로 수행 할 수 있다는 것을 알고 있습니다 .
그래서 질문은 아래와 같았습니다.
..... x = .....;
..... y = .....;
x += y; //compile error
x = x + y; //works properly
이 코드 시도
Object x = 1;
String y = "";
x += y; //compile error
x = x + y; //works properly
이것이 왜 작동하는지 완전히 확실하지 않지만 컴파일러는
+ = 연산자는 인수 유형 개체, 문자열에 대해 정의되지 않았습니다.
두 번째 줄 toString
에 대해 Object에서 호출 되었다고 가정합니다 .
편집하다:
+=
연산자는 일반 객체에서 의미가 없기 때문에 의미 가 있습니다. 내 예제에서는 int를 Object로 캐스트하지만 x
Object 유형 에만 의존합니다 .
Object x = new Object();
x
그래도 Object 인 경우에만 작동 하므로 실제로 String이 Object의 직접 하위 클래스라고 생각합니다. 다음의 경우 실패합니다 x + y
.
Foo x = new Foo();
내가 시도한 다른 유형에 대해.
불가능합니다.
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
int i = 5;
String s = "a";
System.out.println(i+=s); //Error
System.out.println(i+s); // No error
Basically, works for Any object or any non-string primitive and String combination.
I wonder which company it was? :)
This thing will not always give you compilation error
If you are doing smoething like this :
class A{
public static void main(String args[]){
String x = "10";
String y = "s";
x += y;
System.out.println(x);
}
}
It will work fine
even if you do
class A{
public static void main(String args[]){
int x = 10;
float y = 11.5F;
x += y;
System.out.println(x);
}
}
it will work properly.
But if you take x and y two different type of variables like :
class X{
}
class A{
public static void main(String args[]){
X x = new X();
float y = 11.5F;
x += y;
System.out.println(x);
}
}
In such cases it will fail to compile.
*Even you can concatinate any int, float etc with String.
ReferenceURL : https://stackoverflow.com/questions/8137732/how-do-you-declare-x-and-y-so-that-x-y-gives-a-compilation-error-and-x-xy-not
'Program Tip' 카테고리의 다른 글
Kafka의 키 / 값 쌍 기반 메시징의 목적은 무엇입니까? (0) | 2021.01.08 |
---|---|
Django : Jinja2로 전환 하시겠습니까? (0) | 2021.01.08 |
API 등급 제한 방법 (0) | 2021.01.08 |
성능을 향상 시키려면 어떤 PHP opcode cacher를 사용해야합니까? (0) | 2020.12.27 |
이 이미지 처리 테스트에서 Swift가 C보다 100 배 느린 이유는 무엇입니까? (0) | 2020.12.27 |