질문에 게시 된 코드는 분명히 완전한 예가 아닙니다. arraylist에는 아무 것도 추가하지 않고 어디에도 i
을 정의하지 않았습니다.
처음에는 다른 사람들은 원시 유형과 상자 유형의 차이점을 이해해야한다고 말했습니다. 예 : Integer
상자 int
, Double
상자 double
, Long
상자 long
등입니다. Java는 다양한 시나리오에서 상자와 박스를 자동으로 닫습니다 (예전에는 라이브러리 호출을 사용하여 수동으로 상자에 넣고 상자에 넣지 않아도되지만 PITA는 못 생겼습니다).
http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html
는 당신은 대부분 다른 하나 개의 원시적 형태에서 캐스트 할 수 있습니다 (예외가 boolean
인)하지만 당신은 박스 유형에 대해 동일한 작업을 수행 할 수 없습니다. 하나의 박스형을 다른 것으로 변환하는 것은 좀 더 복잡합니다. 특히 상자 유형을 미리 모르는 경우. 일반적으로 하나 이상의 기본 유형을 통해 변환이 필요합니다.
귀하의 질문에 대한 답변은 귀하가 할 수있는 유형의 개체 인 경우 arraylist에 무엇이 있는지에 따라 달라집니다. 장면이 처음 Integer
에 marks.get
의 결과를 캐스팅 뒤에 int
에
sum = ((double)(int)marks.get(i));
캐스트 은, 그것은 그 정수를 언 박싱 할 것입니다. 그런 다음 다른 캐스트를 사용하여 프리미티브 int
을 프리미티브 double
으로 변환합니다. 마지막으로 결과는 sum 변수에 할당 될 때 Double
으로 다시 자동 저장됩니다. (대부분의 경우 Double
이 아닌 합계가 double
일 확률이 높습니다).
arraylist에 유형이 혼합되어 있지만 모두 Number
인터페이스 (Integer, Short, Long, Float 및 Double가 모두 가능하지만 Character 및 Boolean은 그렇지 않음)를 구현하는 경우 수행 할 수 있습니다. 믹스의 다른 유형이있는 경우
sum = ((Number)marks.get(i)).doubleValue();
너무 당신은 그들을 식별하고 적절한 조치를 취하도록 instanceof
연산자를 사용하는 것을 고려해야 할 수도 있습니다.
당신이 사용하는 경우는'Integer.doubleValue()는'double''에'int' 캐스팅 할 필요가 없습니다. 'sum = ((Integer) marks.get (i)). doubleValue();'는보다 간결합니다. –