内部可变状态escape实例

在高并发编程中,作者举了一个内部可变状态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的发布方式,将会使别的对象可以调用对象内部私有的属性,导致私有变量失去意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值