java字符串之理论重点

1、简单概述

一直以来,对String这个字符串类都是心存疑惑的,也不知道如何来进行解决。最近花点时间看了下别人的博客来研究一下,觉得挺有意思的,所以将此来记录下来。

String将会牵扯到堆和常量池,字符串常量池在JDK8中是存在于堆中的,是属于堆的一部分。

引入:

String str = "计算机";

"computer"也是一个字符串对象,只不过上面创建的这个会存在于字符串常量池中,返回来的是在字符串在常量池中的地址。

String str = "计算机";
String str2 = "计算机";

这段代码表示的是都在字符串常量池中来创建"计算机"对象,但是由于第一行中已经在字符串常量池中创建好了"计算机"对象,所以第二行代码将不会再次进行创建,而是直接指向字符串常量池的中"计算机"的地址。因为常量池是用来节省内存资源开销的,将一些经常使用的常量放在里面来方便来使用。

测试这段代码:

        String str = "计算机";
        String str2 = "计算机";
        System.out.println(str==str2); // true

因为二者指向的是在常量池中得同一个地址,所以返回为true

上面两种创建字符串的方式也是官方推荐的,但是和使用new关键字创建出来的字符串有很大的不同的使用

String str = new String("计算机");

首先看到了因为出现了字符串常量"计算机",那么首先做的事情就是检查字符串常量池中有没有"计算机",如果没有,那么添加进去;如果有,那么就不添加;

然后第二步,因为是new,所以会在堆中创建出来"计算机"对象

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值