Android中的java基础(三)——String的不可变性

那么先开始讲String String 对象的不可变性,例如

String a = "1";

a = "2";

这时候实际内存是存在"1",“2”这两个对象,具体的位置是在文字池(pool of literal strings),运行文字池其实是常量池的一部分。

可以理解为每次String改变,并不是改变了此对象,而是重新建立了一个新的对象。而StringBuilder与StringBuffer可以在原始对象上进行变化更改。


例如一下代码:

//测试String型是否相同
		String mString2a  ="2";
		String mString2b = "2";
		String mNewString2a = new String("2");
		String mNewString2b = new String("2");

		System.out.println("(mString2a==mString2b) -->"+(mString2a==mString2b));
		System.out.println("(mString2b==mNewString2a)-->"+(mString2b==mNewString2a));
		System.out.println("(mNewString2a==mNewString2b) -->"+(mNewString2a==mNewString2b));

我们变量命名规则依然是m+是否new+对象类型+数值+区别符,以下是运行结果

(mString2a==mString2b) -->true //这个验证了都是指向文字池的两个不同的变量,他们的文字内容一致,我们通过==等号盘点,他们指向了同一个地方。
(mString2b==mNewString2a)-->false  //这里虽然值相等,但是mNewString2a指向了一个堆区对象,两个变量直接通过等号无法判等。
(mNewString2a==mNewString2b) -->false 
//这里虽然值也相等,但是mNewString2a与mNewString2a指向了堆区不同的对象,两个变量直接通过等号无法判等堆区地址。

对于mString2a可以理解如果文字池没有"2"的时候,则会创建一个对象"2",之后mString2b不会再创建一个对象"2",而mNewString2a、mNewString2b则会分别在堆区创建一个对象,从而在刚刚的这个代码段的过程中,创建了最多3个不同的对象。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值