JAVA中string的赋值_Java中关于String赋值的两种形式

说明:

String在java中是使用频率很高的一个类,之前使用的时候并没有过多的在意,只知道有两种赋值方式,一种是采用字面值方式(String string1 = “string”;),一种是使用new关键字(String string2 = new String(“string”);)。如果使用string1==string2比较的话,你会发现结果为false,说明两者的地址并不一致,虽然我知道两个String比较的话为了避免出错要用string1.equals(string2),但是不知道为什么这么约定,直到今天才渐渐明白……

正是由于String是比较常用的类,不管是用户输入的字符串还是一些文本信息,都要使用String类。java为了提高效率,便于高效的管理这些String对象,设计了String池(String pool)用于存放String对象,下面我们来分析一下两种创建String对象的机制。

第一种方式:

String string1 = “string”;,这种采用字面值创建String对象的方法,首先检查 String Pool 中是否存在“string”这个对象:

1、如果存在,则不创建任何对象,直接将 String Pool 中的这个 string 对象的地址返回来,赋值给 string1 这个引用,这样 string1 就指向 String Pool 中的 “string” 这个对象;

2、如果 String Pool 中不存在 “string”这个对象,那么就先在 String Pool 中创建一个 “string” 对象,然后将 String Pool 中这个 “string” 对象的地址返回来。

第二种方式:

String string2 = new String(“string”);,众所周知new出来的对象是创建在堆内存中的,但是这里因为有 String Pool 的概念,所以略有不同,首先还是检查 String Pool 中是否存在“string”这个对象:

1、如果存在,则不在 String Pool 中再创建 “string”这个对象了,而是在堆内存(heap)中直接创建一个“string”对象,然后将堆中这个 “string”对象的地址返回来,赋值给 string2 引用,这时 string2 指向的是堆中的 “string”对象,注意并不是指向 String Pool;

2、如果 String Pool 不存在 “string”这个对象,则首先在 String Pool 中创建一个“string”对象(为了方便管理嘛),然后再在堆中创建一个“string”对象,返回堆中这个“string”对象的地址,赋值给 string2 这个引用,这便使得 string2 指向了堆中的对应地址。

总结:

使用字面赋值方式创建 String 对象,返回的地址是指向 String Pool 中的,而使用new关键字创建的 String 对象,返回的地址是指向堆内存的。

public class Test {

public static void main(String args[]) {

String string1 = "string";

String string2 = new String("string");

System.out.println(string1 == string2);

}

}

因此这里输出的肯定是false。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值