>Java >java지도 시간 >Java의 일반적인 트랩 질문과 답변

Java의 일반적인 트랩 질문과 답변

高洛峰
高洛峰원래의
2017-01-16 16:20:181691검색

1. 홀수 찾기:

rree

위 방법으로 정말 모든 홀수를 찾을 수 있을까요?

A: 음수의 문제는 고려되지 않습니다. i가 음수이면 잘못된 것입니다. i%2 == 0을 반환해야 합니다

2. 부동 소수점 빼기

public static boolean isOdd(int i){
 return i % 2 == 1;
 }

A: Java의 단순 부동 소수점 유형 float 및 double은 작동할 수 없습니다. Java뿐만 아니라 다른 많은 프로그래밍 언어에도 이러한 문제가 있습니다. 대부분의 경우 계산된 결과는 정확하지만, 몇 번 시도하면(루프를 만들 수 있음) 위와 같은 오류가 발생할 수 있습니다. 물론 덧셈, 뺄셈, 곱셈, 나눗셈에 문제가 있을 수 있습니다.

예:

System.out.println(2.0-1.9);

자릿수가 제한된 일부 소수는 이진수에서 무한히 반복되는 소수가 될 수 있기 때문입니다. 부동소수점에서는 숫자를 표현할 수 없으며 정확도가 떨어집니다.

해결책:

1. a-b가 c와 같은지 또는 a+b가 c와 같은지 확인하려면

System.out.println(0.05+0.01);
System.out.println(1.0-0.42);
System.out.println(4.015*100);
System.out.println(123.3/100);

2를 사용하면 됩니다. "Effective Java"에서 이 책에서 언급하는 원칙은 float와 double은 과학적인 계산이나 공학적인 계산에만 사용할 수 있다는 것입니다. 상용 계산에서는

if(0.05+0.01-0.06 < 0.0000001)
{
}

3을 해결하려면 java.math.BigDecimal을 사용해야 합니다. . 무한 루프

System.out.println((new BigDecimal("2.0")).subtract(
 new BigDecimal("1.9")).doubleValue());

A: 여기서 무한 루프가 발생하는 이유는 i가 Integer.MAX_VALUE일 때 for 루프가 먼저 ++이고 i가 정수일 때 i가 <=END인지 확인하기 때문입니다. MAX_VALUE 다음 ++ , i 는 음수가 됩니다. 그래서 사이클이 계속됩니다.
음수가 되는 이유는 int가 오버플로되기 때문입니다. 여기서 <=END를

4. 정확히 무엇이 반환되나요?

public static final int END = Integer.MAX_VALUE;
 public static final int START = END - 2;
 
 public static void main(String[] args) {
 int count = 0;
 for (int i = START; i <= END; i++)
 count++;
 System.out.println(count);
 }

A: false를 반환합니다. 이때 return true는 도달할 수 없는 문이므로 컴파일 단계에서 최적화되어 제거됩니다.

3. 인터뷰에서 접할 수 있는 몇 가지 트랩 질문을 공유해 보겠습니다.

코드를 살펴보세요:

public static boolean decision() {
 try {
 return true;
 } finally {
 return false;
 }
}

출력 결과는 다음과 같습니다:

A .컴파일 오류 B10.9 C.9 D 위 답변 중 정답이 없습니다.

실행 결과는 다음과 같습니다.

int a=5;
  System.out.println("value is"+((a<5)? 10.9:9 ));

((a<5) ? 10.9) 연산자 정밀도를 기반으로 한 10.9java 자동 변환이 있기 때문입니다. 따라서 다음 9도 9.0이 됩니다.

그래서 D를 선택하세요.

a

value is9.0


결과는 다음과 같습니다. str1.notequalsstr2 이는 StringBuffer가 equals 메서드를 재정의하지 않음을 보여줍니다.

StringBuffer str1=new StringBuffer("123");
  StringBuffer str2=new StringBuffer("123");
  if(str1.equals(str2)){
   System.out.println("str1.equalstr2");
  }else{
   System.out.println("str1.notequalstr2");
  }

결과는 다음과 같습니다.

Float fa=new Float(0.9f);
  Float fb=new Float(0.9f); //Float fb=new Float("0.9f");
  Double db=new Double(0.9f);
  if(fa==fb){ //false
   System.out.println("fa==fb");
  }else{
   System.out.println("fa!=fb");
  }
  if(fa.equals(fb)){ //true
   System.out.println("fa.equalfb");
  }else{
   System.out.println("fa!equalfb");
  }
  if(db.equals(fb)){ //false
   System.out.println("db.equalfb");
  }else{
   System.out.println("db!equalfb");
  }

다른 내용이 있으면 추가해 주시기 바랍니다.

참고:

1. http://blog.csdn.net/ol_beta/article/details/5598867

2. baidu.com/link?url=0UyDU42L7DXZitdydJMG3IIUDIf3xidFCRAObZAq6SHFCEaNnp2Oyuq1KVwBvmlR0UZGHSjD4f6A1yD0d65JL_

3. http://bbs.csdn.net/topics/300023952

4. http://z466459262.iteye.com/blog/ 739300

요약

이 글의 내용이 모두의 공부나 업무에 조금이나마 도움이 되었으면 좋겠습니다. 소통하라는 메시지.

Java의 일반적인 트랩 질문 및 답변과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.