????reader() ????????????????:
???????ζ???????? obj;
???????ζ???????? obj ???????????? j??
???????ζ???????? obj ??????? final ?? i??
???????????????д??? A ??з????κ??????????????????????

?????????????????????????? i ???????????????????????????????????????????д??? A д?????????????????????????? final ??????? A ????????????????????????????
?????? final ??????????????????:??????????? final ?????????????????? ??? final ??????????á??????????????У?????????ò?? null????????? ????? final ?????????? A ????????????
??????? final ????????????
??????? final ?????????????д final ????????????????????????????????????????
????????????????? final ??????????????д???????????????????????????????????????????????????????????????????????
???????′????????
public class FinalReferenceExample {
final int[] intArray;
static FinalReferenceExample obj;
public FinalReferenceExample() {
intArray = new int[1];// 1
intArray[0] = 1;// 2
}
public static void writerOne() {// A??????
obj = new FinalReferenceExample(); // 3
}
public static void reader() {// д??? B ???
if (obj != null) { // 4
int temp1 = obj.intArray[0]; // 5
}
}
}
??????????????? A ??? writerOne()??????????????? B ???reader ??????JMM ???????????? B ?????????д??? A ????????ж? final ?????????????д??
?????????????????????????????
???????????£?
public class FinalReferenceEscapeExample {
final int i;
static FinalReferenceEscapeExample obj;
public FinalReferenceEscapeExample() {
i = 1;// 1
obj = this;// 2 ???????????????
}
public static void writer() {
new FinalReferenceEscapeExample();
}
public static void reader() {
if (obj != null) {// 3
int temp = obj.i; // 4
}
}
}
?????????????? A ??? writer()?????????????? B ??? reader()??????
???????????? 2 ??????δ??????????? B ???????????????? 2 ?????????? ???????????????в??? 2 ??????? 1 ???棬??? read()?????????????????? ?????? final ???????????????????????? 1 ????? 2 ?????????????
???????????????????????????????ò???????????? ???????????? final ????????б?????????????????????????????? ???????? final ?????????????????