String s=“abc“和String s1=new St ring(“abc“);的区别

1.String

先上代码

 

//先讲一下==和equals()的区别

==:基本数据类型比较的是值是否相同,引用数据类型比较的是地址。

equals();比较的是内容是否相同。

为什么会输出上面的结果呢、String s="张三" 的方式,在堆内存中存在一个常量池(Java为了避免产生大量的String对象,设计了一个字符串常量池。)在执行String x = "张三";这句代码时,会先在常量池中检索是否存在,如果不存在,就创建一个,然后将地址值赋值给变量。如果存在则直接将地址值赋值给变量。所以System.out.println(x == y); // true而System.out.println(x == z); 当遇到new时,会在堆内存中创建新的String对象,然后在字符串常量池中检索构造方法中的字符串是否存在,如果存在则将常量池中的字符串地址赋值给构造方法,如果没有则创建一个。因此,x和y为false。

内存图

 

归根结底,new 的时候是在堆内存中创建新的对象。而=" sfdf"是在字符串常量池中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值