String定义的三种格式及其差别

String定义的三种格式:

  1. 直接赋值,例:String str = “abc”;
  2. 创建对象,例:Stirng str1 = new(“abc”);
  3. 拼接对象,例:String str2 = “ab” + “c”; 或者为:String str3 = “ab”;String str4 = str3 + “c”;
    "=="表示两个字符串是否为同一对象,即在内存中,代表着两个地址是否一样。
    他们具体的差别在哪呢?我们可以先看一下代码:
public class Test {

	public static void main(String[] args) {

		String str1 = "abc";	//直接赋值
		
		String str2 = new String( "abc" );	//创建对象
		
		String str3 = "ab" + "c";	//拼接
		
		String str4 = "ab";			//这也是拼接的一种	但和上面的那一种不一样
		String str5 = str4 + "c";
		
		System.out.println( str1 == str2 );
		System.out.println( str1 == str3 );
		System.out.println( str1 == str5 );
		
		System.out.println("===========分割线============");
		System.out.println( str2 == str3 );
		System.out.println( str2 == str5 );
		
		System.out.println("===========分割线============");
		System.out.println( str3 == str5 );
	}
	
}

在这里插入图片描述
在解释这个结果之前,我们得先了解在我们Java程序运行时会维护一个String pool(String池),也叫“字符串缓冲区”。String池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。而一般对象不存在这个缓冲池中,并且创建的对象仅仅存在于方法的堆栈区。

当用户采用直接赋值实例化String对象的时候,如果是第一次定义,则自动的将对象的内容(字符串的内容)保存在字符串对象池中,以后如果有其他的字符串对象依然采用直接赋值的话,可以直接通过对象池取出已经存在的内容继续使用,而不会再重新开辟新的空间。

内存图如下:
在这里插入图片描述
看懂这些后,我想上面代码运行结果的原因你也差不多明白了吧如果还有什么不太清楚的,欢迎评价留言哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值