内部可变状态escape实例

来源:互联网 发布:集邮网厅抢票软件 编辑:程序博客网 时间:2024/05/28 15:29

在高并发编程中,作者举了一个内部可变状态escape的例子,不是很理解,自己又测试了一下,跟大家共享一下。

class UnsafeStates {
private String[] states = new String[] {"AK","AL"};
public String[] getStates(){
    return states;
}
}

public class UnsafeStatesTest {
    public static void main(String[] args) {
        UnsafeStates us = new UnsafeStates();
        String[] argStr = us.getStates();
        argStr[0] = "AKL";
        System.out.println(us.getStates()[0]);
    }
}

结果:

AKL

理解重点:

1.String的存储方式

一般String类中字符串值都是直接存值的。但像String str = "abc";这种场合下,其字符串值却是保存了一个指向存在中数据的引用!用new()来新建对象的,都会在堆中创建,而且其字符串是单独存值的,即使与栈中的数据相同,也不会与栈中的数据共享

2.unsafe的发布方式,将会使别的对象可以调用对象内部私有的属性,导致私有变量失去意义。

0 0
原创粉丝点击