对于String类的学习

-------android培训java培训、期待与您交流! ----------


字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:

     String str = "abc";
 

等效于:

     char data[] = {'a', 'b', 'c'};
     String str = new String(data);


String类型是将所有相同的字符串常量的引用地址指向同一个,不会为多个变量重新在内存中重新生成一个字符串常量。如果想要对字符串进行改变,java会在新的内存地址重新申请内存,将新的字符串写入。

但如果重新构造一个String对象,则重新申请内存,而不是共享。

而字符串比较中,“==”比的是内存地址,“equals”比较的是内容,就是真正的字符串值

public class StringDemo {
	public static void main(String[] args) {
		String str1 = "zhongguo";
		String str2 = "zhongguo";
		String str3 = new String("zhongguo");
		String str4 = new String("zhongguo");
		System.out.println("str1 == str2  :" + (str1 == str2));
		System.out.println("str1 == str3  :" + (str1 == str3));
		System.out.println("str3 == str4  :" + (str3 == str4));
		System.out.println("str1.equals(str2)  :" + str1.equals(str2));
		System.out.println("str1.equals(str3)  :" + str1.equals(str3));
		System.out.println("str3.equals(str4)  :" + str3.equals(str4));
	}

}
<pre name="code" class="java">结果:
str1 == str2  :true
str1 == str3  :false
str3 == str4  :false
str1.equals(str2)  :true
str1.equals(str3)  :true
str3.equals(str4)  :true

 

根据结果可知,str1与str2是相等的,因为String类型的“==”比较的是地址,也就是说他们引用的是同一个地址;

而常量str1与对象str3不等,对象str3与对象str4不等,说明他们引用的地址不同。由此可以证明,构造的对象是新开辟的内存空间来存储字符串的;

最后三个结果是相等的,因为equals比较的是内容,因为都是内容一样的,所以结果为true。


对于字符串常量连接,其实并不是在原来的基础上进行修改,而是新开辟内存(当然如果修改后的字符串,已经在内存中重新生成,则指向这个内存空间),如下:

“I am Tom"与”修改后“I am Tom"+".I am a boy"的引用地址是不同的。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值