Java之object和string的理解

Java之object和string的理解

文章链接http://blog.csdn.net/qq_16628781/article/details/65036244

知识点:

  1. 栈区、堆区和方法区;
  2. object类clone()和qeuales()方法理解;
  3. string类拼接的理解;
  4. 新名词记录{stringBuilder:在元数据上操作,不产生额外内存损耗}

概念

栈区:String s 声明对象的存放区域

堆区:存放new出来的对象的地址值

方法区:1、字符串常量池:”hello”—>地址“:0x001


java object基类:

clone()方法:克隆一个一模一样的对象,不会影响原对象。

注意:我们经常使用的“=”赋值号,是引用的。所以可能会改变原对象的属性。


equals()方法:默认是比较两个对象的地址值。

注意:string类重写了tostring()方法,所以string类型数据比较的是字符串是否相同了。

“==”号比较的是对象的地址值相不相同。如何if(1 == 2)比较的是内存的地址值是否相同。


tostring()方法:输出类的属性。一般来说输出的格式是:类名 + @ + 地址值。

注意:一般来说输出地址值的作用不大。可以重写此方法,然后按照我们的格式进行个性化输出。

一般来说用在bean/entity等类里面重写比较多。


string类

字符串一旦被赋值,内容就不能改变,但是引用可变。
例如:

String s = new String(); //默认构造函数,s什么东西都没有

byte[] bytes = {97,98,99,100}; //A,B,C,D的哈希码

String s2 = new String(bytes); //s2的值为:A,B,C,D

注意:s2先去堆区中找“A,B,C,D”,如果有,则直接返回地址,如果没有就需要创建一个新的空间。

关于字符串的拼接也是如此。
例如:

String s = “hello”;//在方法区中有,就直接返回;无,则创建;
s +=“word”;//s = helloword 在方法区中没有,要创建。s又是引用另一个地址值

所以如果需要更好的性能要求,可以使用stringBuilder类进行拼接,此类的append会在原来的内容上增加,而不会另开空间。 在最新的Java8上面,string类也将和stringBuilder一样,拼接字符串时,不会再开辟新的空间了

区别:
String s2 = new String(“hello”);//在堆区中,实体放在方法区中的字符串常量值中,在栈区中引用的堆区值则是另外一个地址。
String s1 = “hello”;//栈区中的声明,直接引用方法区中的地址值,如果有的话,直接返回地址值。


string类的判断功能:

equals(object obj);
equalsIgnorecase(String str);
contains(string str);
startswith(String str);
endswith(String str);
isEmpty();
indexOf(int index)//返回指定字符串在此字符串中第一次出现的索引
charAt(int index)//返回指定位置的char字符
indexOf(String str)//返回指定字符的索引
indexOf(int start,int end)//包左不包右
indexOf(int start)//包含start,默认到结尾
subString(int start)//默认到末尾
subString(int start,int end)//包左不包右

总结

理解最终的基类的注意的几个点,有助于我们理解出现的一些很奇葩的问题,例如“=”引用,新的对象改变属性值,是会对元数据产生影响的。那么如果我们需要和元数据完全隔绝,那么应该使用clone()方法进行克隆。

在字符串拼接问题上,很多人都是使用string类进行直接操作。如果每一次拼接,在堆区中都找不到(很大可能),那么每一次都会产生一个丢弃的对象,这在移动设备这样空间有限的机器上运行是拖累性能的bug。

而stringBuilder类则可以解决上面的问题,所以推荐尽量使用stringBuilder。

至此。
如有任何问题,请及时与我联系,谢谢。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值