String与new String()的区别和==与equals的区别以及拼接的区别?

本文详细解析了Java中String直接赋值与使用new关键字创建的区别,包括字符串实例池的作用、==与equals的对比,以及对象与字符串相加的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比较String与new String()的区别

String str1="123";
String str2=new String("456");
String str3=new String("456");

这两种声明变量是有区别的
1.str1会创建一个对象或者不会创建一个对象,其中出现了一个字符串实例池的概念,实例池中存放许多字符串,当声明的字符串已经存在实例池中,该语句就不会创建对象而直接引用池中的字符串。当字符串并不存在实例池中就会创建对象,并放入实例池中。
总的来说:就是再栈区创建str1的引用,然后在字符串实例池中去查找是否存在字符串的内容,如果存在直接引用,不存在则创建并放入实例池中。

2.str2不管怎样都会创建新的对象而且是两个对象,首先在栈中创建str2的引用对象,然后在堆中创建一个包含字符串的对象,str2保存的值包含字符串的对象的内存地址。
而str2==str3;结果为false,因为引用对象的地址不一致。

简单描述==与equals的区别

简单说,==比较的是变量在栈内存中存放的内存地址,而equals比较的是变量在栈内存中存放的内存地址所指向的那个对象的值。

简单描述对象与对象和对象与字符串相加的区别

String a="abc"
String b="asdf";
String c=a+b;
String d=a+"adsfds";

1.a+b:表示先合并字符串,然后去字符串实例池中查找
2.a+“adsfds”:表示通过创建StringBuffer(或者StringBuilder),之后再转化为String类,实际上new了对象,并且在堆上进行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值