왜 이 Java 루프는 무한하지 않은가 🤔
발행: (2026년 5월 11일 PM 02:31 GMT+9)
2 분 소요
원문: Dev.to
Source: Dev.to
Code Example
public class Main
}
}
Sample Output
Start
0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -42, -43, -44, -45, -46, -47, -48, -49, -50, -51, -52, -53, -54, -55, -56, -57, -58, -59, -60, -61, -62, -63, -64, -65, -66, -67, -68, -69, -70, -71, -72, -73, -74, -75, -76, -77, -78, -79, -80, -81, -82, -83, -84, -85, -86, -87, -88, -89, -90, -91, -92, -93, -94, -95, -96, -97, -98, -99, -100, -101, -102, -103, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, -115, -116, -117, -118, -119, -120, -121, -122, -123, -124, -125, -126, -127, -128,
"i" value is 127
End
Why the Loop Terminates
루프가 무한히 실행되는 것처럼 보이는 이유는 변수 i가 계속 감소하면서 항상 10보다 작아 보이기 때문입니다. 하지만 i는 byte 타입으로 선언되었으며, Java의 byte는 ‑128부터 127까지의 값만 저장할 수 있습니다.
- 루프는
0에서 시작해 각 반복마다i를 감소시킵니다. i가‑128에 도달하고 한 번 더 감소하면‑129를 표현할 수 없습니다.- Java의 byte 오버플로우가 발생하면서 값이
127로 감싸집니다. i == 127이 되면 루프 조건i < 10이 거짓이 되므로 루프가 종료됩니다.
따라서 byte 타입의 오버플로우 때문에 루프가 영원히 실행되지 않고 종료됩니다.