programming/JAVA

[Java] Arrays.asList(int[]) 의 잘못된 사용

LeeBorn 2022. 3. 27. 20:59
반응형

Java

Arrays.asList() 는 배열을 List로 바꿔주는 것으로 알고 있었다.

그래서 아래와 같은 코드를 의심 없이 작성하였다.

(코드를 작성할 때 의도한 것은 2,4를 배열에 넣고, 3,4가 해당 배열에 있는지, 없는지 확인하는 코드이다.)

int[] int_numbers = {2,4};
Integer[] integer_numbers = {2,4};

@DisplayName("List.contains 테스트")
@Test
void listContainsTest(){
	assertAll(
		()->assertFalse(Arrays.asList(int_numbers).contains(3)
        	, "int_numbers contains 3"),
		()->assertTrue(Arrays.asList(int_numbers).contains(4)
        	, "int_numbers contains 4"),

		()->assertFalse(Arrays.asList(integer_numbers).contains(3)
        	, "integer_numbers contains 3"),
		()->assertTrue(Arrays.asList(integer_numbers).contains(4)
        	, "integer_numbers contains 4")
	);
}

 

해당 코드를 실행해보면 아래와 같은 결과를 볼 수 있다.

테스트 실패

"int_numbers contains 3"은 성공했고, "int_numbers contains 4"는 실패했는데 사실 둘 다 실패한 것이다.

 

실제로 Arrasys.asList로 반환된 값들을 foreach로 실행해보면, 기대한 것과 다른 결과를 반환한다.

int[] int_numbers = {2,4};
Integer[] integer_numbers = {2,4};
    
@DisplayName("List.foreach 테스트")
@Test
void listForeachTest(){
	Arrays.asList(int_numbers).forEach(ints -> {
		System.out.println("int_numbers >> " + ints);
	});

	Arrays.asList(integer_numbers).forEach(integers->{
		System.out.println("integer_numbers >> " + integers);
	});
}

 

실행결과는 integer_numbers는 기대한 대로 2,4가 출력됐지만, 

int_numbers의 2,4는 출력되지 않았다.

Arrays.asList().foreach()

 

Arrays.asList(int_numbers)는 List <int []> 형태로 반환하기 때문에 기대했던 값들을 확인할 수 없었던 것이다.

 

더 자세한 내용은 아래 링크를 참조하면 알 수 있다.

https://stackoverflow.com/questions/1467913/arrays-aslist-not-working-as-it-should

 

Arrays.asList() not working as it should?

I have a float[] and i would like to get a list with the same elements. I could do the ugly thing of adding them one by one but i wanted to use the Arrays.asList method. There is a problem though. ...

stackoverflow.com

반응형