您的位置:首页 > 其它

关于final修饰局部变量问题

2017-09-08 15:28 309 查看
总结一下final修饰符问题:

1、修饰对象时,指向对象的引用不可变

例子: a赋值给b没有问题,但是反过来b赋值给a的时候,编译器就会报错了

public static void test2() {

final List<String> a = new ArrayList<String>();

a.add("aa");

List<String> b = a;

b.add("b");

a=b;

for (String s : a) {

System.err.println(s);

}

}

1、修饰的对象内容可变

例子:List 被加上了final修饰符,但还是可以增加元素进去

public static void main(String[] args) {

List<String> a = test();

for (String s : a) {

System.err.println(s);

}

}

public static List<String> test() {

Map<String, Object> abc = new LinkedHashMap<>();

final List<String> ret = new ArrayList<>();

abc.put("abc", "测试");

abc.put("abc1", "测试1");

abc.put("abc2", "测试2");

abc.put("abc3", "测试3");

abc.put("abc4", "测试4");

abc.forEach(new BiConsumer<String, Object>() {

@Override

public void accept(String t, Object u) {

// 允许修改final List中的值

ret.add(t);

}

});

return ret;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: