String类知识点整理

本文通过两个面试题深入解析Java中String常量池的工作原理及new关键字创建对象的过程。首先,分析了当使用直接赋值方式创建String时,常量池如何存储并复用对象。其次,探讨了使用new关键字创建String时,对象在堆内存中的创建及与常量池的关系。通过对比两种方式下对象地址的一致性,揭示了Java内存管理的细节。
摘要由CSDN通过智能技术生成

先来个面试题吧
面试题一
String a = "ab";
String b = "a" + "b";
sysout(a==b)
答案是true还是false呢?
我们来一起分析一下这个过程
a变量创建时,会在常量池中开辟一块空间存放ab,然后将空间地址赋值给a;
b变量创建时,编译器会自动将+的结果运算出来,相当于b == "ab",此时JVM会先判断常量池中是否存在,直接将该对象的地址引用赋值给b变量,因此a跟b都是指向的常量池中的同一块地址,所以答案是true。
面试题二
String a = "ab";
String b = new String("ab");
sysout(a==b)
a变量的创建跟上一题一样
b使用new String(str)方式创建字符串时,如果常量池中存在,则拷贝一份放到堆中,并将堆中的地址指向b;如果常量池中不存在,则新建一份放到常量池中,并拷贝一份放到堆里,并将堆里的地址指向b。所以a字符串在常量池中的值跟b所指向的不是同一份,答案为false。

转载于:https://blog.51cto.com/14380904/2406261

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值