Java 자체는 값 전달 호출이며 주소 값이 객체에 전달됩니다. 주소 값을 다시 할당하는 것은 다시 가리키는 것과 동일하며 외부 레이어에는 영향을 주지 않습니다.
그리고 여기 Integer 객체도 특별한 특성을 가지고 있습니다. 실제로는 비슷할 수도 있지만
다음과 같이 코드 코드를 복사합니다 .
클래스 정수{
final int value; //한번 할당되면 변경할 수 없습니다.
}
이는 호출 시 전달된 주소 값이 외부 레이어를 변경할 수 없으며 객체 자체가 변경될 수 없음을 나타냅니다 . 결과적으로 이 값은 변경할 수 없습니다.
많은 솔루션이 있습니다
1. Java 스타일은 단일 값에 대한 반환 값을 사용하는 것입니다. return i; 외부에 i=foo()를 할당합니다. 여러 값에 대해 배열이나 개체를 사용합니다.
2. 자신만의 캡슐화 클래스를 전달하세요. 클래스 MutableInteger{ int 값;}
3. 전용 AtomicInteger 원자 정수 객체를 전달합니다.
다음과 같이 코드 코드를 복사합니다 .
공개 정적 무효 메인(문자열[] 매개변수) {
AtomicInteger i=new AtomicInteger(40);
i.intValue();
System.out.println(i);
}
공개 정적 무효 변경(AtomicInteger i) {
i.set(55);
}
값을 전달한 후 변경할 수도 있습니다.
권장 옵션 1, 피하십시오