liebmona.net/mblog
C에서 const가 const가 아닌 이유.
#include <stdio.h>
int main(void)
{
const int i = 100;
int *pi = (int*)&i;printf( “%d\n”, *pi );
*pi = 400;
printf( “%d\n”, *pi );
return 0;
}컴파일하여 실행해보면 알겠지만 포인터 변환에서 const 제거가
언제든 가능하므로.
심지어 (int*)을 생략해도 경고만 뜨면서 무사히 컴파일 완료.
const int *pi = &i; 이어야만 const가 보장됨.
Java에도 비슷한 트릭 있음(기억 안남 ㅜㅜ)
아마 이걸 말씀하시는게 아닐까라고 추측함.
참조는 unmodifiableList로 반환하지 않으면 final을 지정해도 final이 아님
import java.util.*;
class Ref {
public final int array[];
public Ref() {
array = new int[] { 1,2,3,4,5 };
}public void dump() {
System.out.println(“array —–“);
for(int i: array) {
System.out.println(i);
}
System.out.println(“end —–“);
}
}public class RefTest {
public static void main(String[] args) {
Ref r = new Ref();
r.dump();
r.array[0] = 3;
r.dump();
}
}
실행결과는
array —–
1
2
3
4
5
end —–
array —–
3
2
3
4
5
end —–
Leave a Reply