String类使用中的隐秘之处

JavaString类是final类型,不可被继承,String有两种赋值的方式,一种是通过String s1=”abc”,一种是通过String s2 =new String(“abc”);

第一种赋值的方式是直接用对象是指向堆内存中的abc(内存中已经存在了abc的情况下),在编译的时候已经确定其再内存中所指向的地址,而在使用一个新的Strings3=”abc”的话,这里的abc依旧是s1所指向的那个abc的地址。所以使用s1==s3的时候显示的是true

第二种赋值方式是使用new开辟了新的堆内存,其中abc这个字符串只属于s2拥有,并且是在程序运行的时候才会分配空间,考虑到new方式是开辟新的内存空间,故使用String s4=new String(“abc”);这里使用s2==s4返回的却是false,是因为这里的两个abc都是属于“私有“的。下面看一个实例:

public void Stringfortest() {
		String s1 = new String("abc");
		String s2 = "abc";
		String s3 = "abc";
		String s4 = new String("abc");
		System.out.println("the first result:" + (s1 == s2));
		System.out.println("the sec result:" + (s2 == s3));
		System.out.println("the th result:" + (s1 == s4));
		System.out.println("the fourth result is:" + s2.equals(s4));

	}


输出结果是:

the first result:false
the sec result:true
the th result:false
the fourth result is:true

String类重写了equals方法,其中equals==的区别是:

==比较的是两个变量的值是否相等,也就是比较内存中所存储的变量值是否相同,即是比较两个变量的引用是否相等。Equals强调的是两块内存,即使对象是一块内存,变量也是一块内存,使用equals是比较两个独立对象的内容是否相同。

既然讲到了Stringjava中提供了另外一个操作字符串的类,StringBuffer

它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。另外,String实现了equals方法,new String(“abc”).equals(newString(“abc”)的结果为true,StringBuffer没有实现equals方法,所以,new StringBuffer(“abc”).equals(newStringBuffer(“abc”)的结果为falseString覆盖了equals方法和hashCode方法,而StringBuffer没有覆盖equals方法和hashCode方法,所以,将StringBuffer对象存储进Java集合类中时会出现问题。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值