Java 中的缓存

Java中的缓存

Java诞生之初是为消费性数字产品而设计,这类产品自身内存及运算资源十分有限。因此,Java有着许多为节省资源而作的设计,如整型缓存池、字符串池等。这样的设计无疑节省了资源提高了效率,但如果对此一知半解很可能导致一些难以发现的问题。看看下面的代码:

public class CacheMain {
    public static void main(String[] args)
    {
        String str1 = "java";
        String str2 = "java";
        System.out.println(str1 == str2);
        System.out.println("java" == str1);
        System.out.println("java" == str2);
    }
}

Java中的“==”号对基本类型比较二者的值是否相等,对类类型比较二者是否引用自同一个对象。按照这个逻辑,此处的str1和str2均是类类型,那么是否应该输出false呢?但运行结果却是3个true,换句话说,str1和str2均指向了同一个对象。

用双引号写下的字符串称为字符串常量,既然是常量,那么只要内容相同(包括序列和大小写)无论在代码中出现多少次均指向同一个String实例。

再看下面的代码:

public class CacheMain {
    public static void main(String[] args)
    {
        String str = "java";
        String str1 = new String(str);
        String str2 = new String(str);
        System.out.println(str == str1);
        System.out.println(str1 == str2);
    }
}

这次输出了2个false,原因就是str1和str2的建立均使用了new,因为new一定是建立新对象。除了字符串中的缓存池以外还有整型缓存池,可以见我的另一篇文章——自动装箱与拆箱中的陷阱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值