다음 Java 프로그램의 출력을 예측하십시오.
프로그램 1:
// Main.java public class Main { public static void gfg(String s) { System.out.println('String'); } public static void gfg(Object o) { System.out.println('Object'); } public static void main(String args[]) { gfg(null); } } //end class
산출 :
String
설명 : 다음의 경우 메소드 오버로딩 가장 구체적인 방법은 컴파일 타임에 선택됩니다. 'java.lang.String'은 'java.lang.Object'보다 더 구체적인 유형입니다. 이 경우 'String'을 매개변수로 사용하는 방법이 선택됩니다.
프로그램 2:
Java
// Main.java public class Main { public static void gfg(String s) { System.out.println('String'); } public static void gfg(Object o) { System.out.println('Object'); } public static void gfg(Integer i) { System.out.println('Integer'); } public static void main(String args[]) { gfg(null); } } //end class
산출:
Compile Error at line 19.
설명: 이 경우 메소드 오버로딩 가장 구체적인 방법은 컴파일 타임에 선택됩니다.
'java.lang.String' 및 'java.lang.Integer'는 'java.lang.Object'보다 더 구체적인 유형이므로 'java.lang.String'과 'java.lang.Integer' 사이에는 더 구체적인 유형이 없습니다.
이 경우 Java는 어떤 메소드를 호출할지 결정할 수 없습니다.
프로그램 3:
// Main.java public class Main { public static void main(String args[]) { String s1 = 'abc'; String s2 = s1; s1 += 'd'; System.out.println(s1 + ' ' + s2 + ' ' + (s1 == s2)); StringBuffer sb1 = new StringBuffer('abc'); StringBuffer sb2 = sb1; sb1.append('d'); System.out.println(sb1 + ' ' + sb2 + ' ' + (sb1 == sb2)); } } //end class
산출:
abcd abc false abcd abcd true
설명 : Java에서 문자열은 변경 불가능하고 문자열 버퍼는 변경 가능합니다.
따라서 문자열 s2와 s1은 모두 동일한 문자열 abc를 가리킵니다. 그리고 변경 후에 문자열 s1은 abcd를 가리키고 s2는 abc를 가리키므로 false입니다. 문자열 버퍼에 있는 동안 sb1과 sb2는 모두 동일한 개체를 가리킵니다. 문자열 버퍼는 변경 가능하므로 한 문자열을 변경하면 다른 문자열도 변경됩니다. 따라서 두 문자열은 객체(여기서는 sb2)를 변경한 후에도 여전히 동일한 객체를 가리키고 있습니다.
프로그램 4:
// Main.java public class Main { public static void main(String args[]) { short s = 0; int x = 07; int y = 08; int z = 112345; s += z; System.out.println('' + x + y + s); } } //end class
산출:
Compile Error at line 8
설명:
1. 12행에서 println의 ''는 숫자가 자동으로 문자열로 변환되도록 합니다. 따라서 추가를 수행하지 않고 문자열로 함께 추가합니다.
2. Line11에서 +=는 자동으로 short로 변환합니다. 그러나 숫자 123456은 short에 포함될 수 없으므로 음수 값(-7616)이 됩니다.
(참고 - 짧은 2바이트 -32768 ~ 32767) 여기서 숫자 123456은 int zit의 값이 int 값의 길이를 표시한다는 의미는 아닙니다.
3. 나머지 두 개는 빨간색 청어입니다. 그러나 8행으로 인해 코드가 컴파일되지 않기 때문입니다.
0으로 시작하는 모든 숫자는 8진수(0-7)로 처리됩니다.
Q2는 언제 시작해요?