Java+字符串+赋值+相等_为什么java里用常量赋值就相等,用字符串就不等?

本文探讨了Java中字符串`==`与`.equals()`的区别,以及字符串对象在内存中的分配情况。通过例子解释了直接赋值与使用`new String()`创建字符串时,常量池与堆空间的使用。重点讲解了字符串比较时的地址与值相等的概念。
摘要由CSDN通过智能技术生成

例一:

String s0="HF";

String s1=new String("HF");

System.out.println(s0==s1);

输入为什么是false呢?

例一解释:

"=="表示的是地址是否相等。equals表示两个字符串的值是否相等,如果为s0.equals(s1)则返回true。

程序执行时,会在栈里分配两块空间s0 s1,在堆空间里存储对象。内存分配图如下:

a5b6701b229573507724f17a00a5cf79.png

例二:

(1) String s1="123";

String s2="123";

s1变量先在栈中,然后在堆中开辟一个空间存储"123"

(直接赋值,例如String s1="123")这个字符串存储在

一个特殊的区域----常量池,

在s2创建字符串"123"之前会先寻找堆中的常量池是否有

对象"123",如果有就直接指向已经存在的"123"

没有的话就重新开辟一个新空间存储在常量池中

(2)String s1=new String("123");

String s2=new String("123");

变量s1先在栈中存储,然后在堆中开辟一个空间存储"123",

s2创建字符串"123",直接再开辟新空间存储"123".

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值