7. 자바 면접 문제 2

2555 단어 Java 면접 문제
1. 다음과 같은 코드를 분석한다.
class Confusing 
{
	private Confusing(Object o)
	{
		System.out.println("Object");
	}
	private Confusing(double[] dArray)
	{
		System.out.println("double array");
	}
	public static void main(String[] args) 
	{
		new Confusing(null);
	}
}
  • 실행 결과: Double array
  • 자바의 재부팅 해석 과정은 두 단계로 실행된다.
  • 1단계에서 얻을 수 있고 응용할 수 있는 모든 방법이나 구조기를 선택한다.
  • 2단계는 1단계에서 선택한 방법이나 구조기 중에서 가장 정확한 것을 선택한다.
  • 만약에 한 방법이나 구조기가 다른 방법이나 구조기에 전달되는 모든 매개 변수를 받아들일 수 있다면 우리는 첫 번째 방법이 두 번째 방법보다 정확성이 부족하다고 말한다
  • new Confusing((Object)null);
  • 이렇게 하면 Confusing(Object)만 적용할 수 있음을 확보할 수 있다.더욱 일반적으로 컴파일러가 정확한 리셋 버전을 선택하도록 강요하려면 실제 파라미터를 형식 파라미터가 설명하는 유형으로 바꾸어야 한다.
  • 이런 식으로 여러 개의 리셋 버전 중에서 선택하는 것은 상당히 불쾌하다.
  • 당신의 API에서 클라이언트가 이런 극단을 걷지 않도록 확보해야 합니다.
  • 이상적인 상태에서 무거운 짐을 쓰는 것을 피해야 한다. 방법에 따라 다른 이름을 지어야 한다.
  • 재부팅을 확실히 했다면 모든 재부팅 버전이 받아들인 매개 변수 형식이 서로 호환되지 않도록 하십시오. 그러면 두 개의 재부팅 버전이 동시에 적용될 수 없습니다.
  • 만약 이 점을 하지 못한다면 모든 응용 가능한 리셋 버전이 같은 행위를 하는지 확인하십시오
  • 한 마디로 하면 리셋 버전의 해석이 혼동될 수 있다.
  • 가능한 한 무거운 짐을 피해야 한다. 만약 무거운 짐을 옮겨야 한다면 이런 혼동을 최소화하기 위해 상술한 방침을 준수해야 한다.
  • 만약 디자인이 엉망인 API가 다른 리셋 버전 사이에서 선택하도록 강요한다면 실제 파라미터를 당신이 호출하고자 하는 리셋 버전의 형식 파라미터가 가지고 있는 유형으로 바꾸십시오.

  • 2. 코드 분석
     
    class Demo2
    {
    	public static void main(String args[])
    	{
    		StringBuffer s=new StringBuffer();
    		s.append(1>5?100:'A');
    		s.append(6>5?90:'B');
    		System.out.println(s);
    		
    		s.delete(0,s.length());
    		int i = 90;
    		s.append(1>5?i:'A');
    		s.append(6>5?i:'B');
    		System.out.println(s);
    
    		s.delete(0,s.length());
    		s.append(1>5?(int)100:'A');
    		s.append(6>5?(int)90:'B');
    		System.out.println(s);
    
    		System.out.println(6>5?100:'b');
    		System.out.println(1>5?'b':100.5);
    	}
    }
    //     :AZ 6590 AZ d 100.5
  • jvm는 연산에 참여한 데이터 유형에 따라 어떤 방법을 사용할지 추정
  • 90의 값을 int i에 부여할 때'A'와'B'가 i와 연산을 하면 int형으로 올라가 append(int)이라는 방법을 사용했기 때문에 결과는 6590
  • 이었다.
  • 다른 경우 90100은 상량으로 존재하며 문자와 연산할 때 데이터 형식이 지정되지 않았고char라는 데이터 형식에 표시될 수 있기 때문에char형으로 저장된다.append(char)
  • 사용
  • 강제 형식 변환을 사용해도 무시됩니다. 상수의 데이터 형식 변환은 컴파일러가 컴파일하기 전에 한 단계 진행되기 때문에 강제 형식 변환의 역할을 하지 않습니다.
  • 좋은 웹페이지 즐겨찾기