2015-01-07 2 views
-3

비교 :Downcasting의 usng 래퍼 감안할 프리미티브

변환 방법을 사용해야합니까
double x = 15d; 

: 하나의 장점 광석 무엇

int val = new Double(x).intValue(); 

:

int val = (int)x; 

또는를 다른?

+0

중요한 실시간 짧은 메모리 응용 프로그램을 작성하지 않는 한 큰 영향은 없습니다. 이것이 당신의 경우라면, 전자를 사용하십시오. 그렇지 않으면 기분이 좋은 것을 사용하십시오. IMO 코드 단순화를 위해 전자를 선택합니다. –

+1

Double.intValue는 내부적으로 (int) 캐스트를 사용합니다. 이전을 사용하십시오. – ControlAltDel

답변

3

new Double(x).intValue(); 나는 그것을 백업 할 것이 없지만 (trivially) 덜 효율적이라고 생각됩니다. 현실적으로 어떤 방법 으로든 기능상의 이점은 없습니다. 그러나, 나는 (int)x가 훨씬 더 읽기 쉽고, 이는 상당한 이점이라고 생각합니다.

가장 중요한 것은 premature optimization is the root of all evil입니다.

+1

* "조기 최적화는 모든 악의 근원입니다"*는 조기에 최적화되었습니다. 만약 당신이 그것을 인용하려고한다면 적어도 단순한 부분이 아닌 전체 인용구를 인용하십시오. –

0

내가 아는 유일한 차이점은 정수 값을 다시 반환하기 전에 Double 클래스의 새 개체를 만들어야한다는 것입니다 (.intValue()).

언급 한 첫 번째 정수 값을 반환하기 전에 새 개체를 만들 필요가 없습니다.

int val = (int) x; 
+0

'new Double'은 익명 객체를 생성하지 않고,'Double' 객체를 생성합니다. – m0skit0

+0

변수에 저장되지 않은 개체는 무엇이라고 부릅니까? 저는 항상 익명의 객체를 (이름이 없기 때문에) 호출했습니다. 익명의 클래스 정의 - 다른 개념과 혼동하지는 않습니다. – NoseKnowsAll

+0

이름이 필요 없기 때문에 이름이 없습니다. 익명 *은 다른 이름의 이름이기 때문에 사용하면 안되며 혼란 스럽습니다. – m0skit0

0

가 기능적으로, 그들은 동일 (같은 결과를 얻을 수) : 저는 개인적으로 첫 번째를 사용하는 이유

입니다. 두 번째 것은 (객체 할당 때문에) 낭비적이고 가독성이 떨어진다. 그것을 사용하기위한 이유는 무엇이든 (int) x입니다.

Integer.parseInt(String.format("%.0f", x))과 같은 작업을 수행 할 수도 있습니다. 네가 뭔가를 할 수 있다고해서 네가해야한다는 뜻은 아니야.