>  기사  >  Java  >  이러한 어려운 Java 인터뷰 질문에 답할 수 있습니까?

이러한 어려운 Java 인터뷰 질문에 답할 수 있습니까?

王林
王林앞으로
2021-03-15 09:21:534153검색

이러한 어려운 Java 인터뷰 질문에 답할 수 있습니까?

이 기사에는 많은 사람들이 당황한 외국 Java 인터뷰 질문도 정리되어 있습니다. 인터뷰 질문을 살펴보고 무엇이 흥미로운지 살펴보겠습니다.

1. 다음 Java 코드의 출력은 무엇입니까?

public class Test {
  
  public static void main(String[] args) {
    method(null);
  }
 
  public static void method(Object o) {
    System.out.println("Object method");
  }
  
  public static void method(String s) {
    System.out.println("String method");
  }
}

답변:

은 "문자열 메서드"를 인쇄합니다. 우선, null은 Java의 객체가 아닙니다. Java에서는 모든 참조 유형에 null을 할당할 수 있습니다. Java의 문자열은 Java.lang.String 클래스의 객체입니다. 여기서 Java 컴파일러는 가장 구체적인 매개변수 유형을 사용하여 오버로드된 메소드를 호출하도록 선택합니다. String 유형은 Object보다 더 구체적이므로 method(String s) 메서드가 호출됩니다.

2. 다음 Java 코드의 출력은 무엇입니까?

public class Test{
  public static void main(String[] args){
    Integer num1 = 100;
    Integer num2 = 100;
    if(num1 == num2){
      System.out.println("num1 == num2");
    }
    else{
      System.out.println("num1 != num2");
    }
  }
}

답변:

은 "num1 == num2"를 인쇄합니다. "=="를 사용하여 서로 다른 두 개체 참조를 비교할 때마다 값은 항상 "false"입니다. 하지만 여기서는 정수 캐싱으로 인해 num1과 num2가 자동 박싱됩니다. 따라서 num1 == num2는 "true"를 반환합니다. 또한 정수 캐싱은 -128에서 127 사이의 값에 대해서만 발생합니다.

3. 가비지 수집은 Java 애플리케이션의 메모리 부족을 어떻게 방지하나요?

답변:

Java 가비지 수집기는 Java 애플리케이션의 메모리 부족을 방지할 수 없습니다. 객체가 범위를 벗어나 더 이상 필요하지 않을 때 사용되지 않은 메모리를 간단히 지웁니다. 따라서 Java 애플리케이션의 메모리 부족을 방지하는 것은 보장되지 않습니다!

(학습 동영상 공유: java 동영상 튜토리얼)

4. Java는 "참조에 의한 전달"인가요 아니면 "값에 의한 전달"인가요?

답변:

Java는 항상 "값에 의한 전달"입니다. 그러나 객체의 값을 전달할 때 변수는 객체 자체가 아닌 객체 참조를 저장하므로 해당 객체에 대한 참조를 전달합니다. 그러나 이는 초보자에게 혼란을 줄 수 있는 "참조에 의한 전달"이 아닙니다.

5. 다음 코드는 몇 개의 String 개체를 생성합니까?

public class Test{
  public static void main(String[] args){
    String s = new String("Hello World");
  }
}

답변:

2 String 개체가 생성됩니다. 하나는 힙 메모리에 있고 다른 하나는 메서드 영역의 문자열 상수 풀에 있습니다.

6. 다음 코드의 출력은 무엇입니까?

public class Test{
  public static void main(String[] arr){
    System.out.println(0.1*3 == 0.3);
    System.out.println(0.1*2 == 0.2);
  }
}

답변:

print의 첫 문장은 false를 출력하고, print의 두 번째 문장은 true를 출력합니다. 부동 소수점 숫자의 반올림 오류로 인해 간단한 이진 표기법에서는 2의 거듭제곱만 정확하게 표현할 수 있습니다. 2의 거듭제곱에 해당하지 않는 숫자는 제한된 자릿수에 맞게 반올림해야 하므로 0.1*3은 0.3과 같지 않습니다.

7. Java에서 정적 메서드를 재정의하거나 오버로드할 수 있나요?

답변:

정적 Java 메서드를 오버로드하는 것은 가능하지만 재정의하는 것은 불가능합니다. 하위 클래스에 동일한 이름을 가진 다른 정적 메서드를 작성할 수 있지만 슈퍼클래스 메서드를 재정의하지는 않습니다. 자바에서는 메소드 은닉(Method Hiding)이라고 합니다.

8. 두 개의 double 값이 같은지 테스트하는 가장 신뢰할 수 있는 방법은 무엇입니까?

답변:

Double.compare(d1, d2) == 0

9. try 또는 catch 블록이 return 문을 실행하면 finally 블록이 실행되나요?

답변:

실행됩니다. finally 블록이 실행되는 것을 방지하는 유일한 방법은 System.exit()를 사용하는 것입니다.

10. 다음 코드의 출력은 무엇입니까?

public class Test{ 
  public static void main(String[] args){ 
   System.out.println("main method");
  } 
  public static void main(String args){ 
   System.out.println("Overloaded main method");
  } 
}

답변:

은 "main method"를 인쇄합니다. Java에서는 기본 메서드를 오버로드할 수 있으므로 오류나 예외가 발생하지 않습니다. 다른 메소드처럼 실행하려면 기본 메소드 내부에서 호출해야 합니다.

관련 추천: java 인터뷰 질문 및 답변

위 내용은 이러한 어려운 Java 인터뷰 질문에 답할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제