String -- 俩种实例化方式的区别

String有俩种实例化方式:

1.通过直接赋值:String str1 = "A"; 

2.通过new方法: String str2 = new String("A");


下面来看一段简单的代码:

public class String1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String s1 = "A";
		String s2 = "A";
		String s3 = new String("A");
		System.out.println("s1==s2 -- "+ (s1==s2));
		System.out.println("s1==s3 -- "+ (s1==s3));
		System.out.println("s2==s3 -- "+ (s2==s3));
	}
}

打印出来的log:

s1==s2 -- true
s1==s3 -- false
s2==s3 -- false


“==”是进行数值的比较,即s1/s2/s3的指向堆内存地址值的比较。

1.首先分析为什么s1==s2

String s1 = "A"; 其实就是开辟一个新的内存空间存放“A”,让s1指向这块内存空间;

String s2 = "A";因为堆内存空间已经有了字符串“A”,所以不会再开辟新的内存空间,此时s2也是指向这块内存空间;

总结:当String采用直接赋值的方式后,只要以后声明的字符串内容相同,都不会开辟新的堆内存空间。


2.分析为什么s1!=s3 

String s3 = new String("A"); 用new方法就是开辟一个新的堆内存空间存放字符串“A”,故s1 和 s3 指向的堆内存空间不一样。

但是用new的方法,会开辟俩个内存空间,第一个是垃圾空间,会被回收, 第二个才是new关键字开辟的空间。

相比第一种直接赋值方法,new方法效率更低,在开发中,通常使用第一种直接赋值的方法。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值