String 个人理解

2019-03-28  本文已影响0人  从入门到暴毙

1.继承关系

因为string是继承final的,所以他是一个不可变的字符串,并且还不能被继承

重点:String 类中的每一个看起来会修改 String 值的方法,实际上都是创建了一个全新的 String 对象,用来包含修改后的字符串内容,这也可以说明 String 对象具有只读的属性。

2.构造方法

空参数初始化

以上代码创建了两个string对象

1.创建了一个值为空string对象

2.然后创建一个"hello"存在常量池中,因为string继承final,所以是存在常量池中,然后将这个值赋值给第二个string对象

3.在将第二个string对象的引用传递给第一个string对象

带参初始化

以上代码创建一个对象

1.创建一个hello在常量池中,然后赋值给string

equals方法

1.首先会判断他们的引用地址是不是相等的,如果是相等的,说明是他们相同

2.其次是判断他们的长度是不是相同的。如果长度不相同的话说明他们不相同,直接返回false

  如果相同的情况下,再去判断他们的值是不是相同的,相同返回true,反之为false

hashCode方法

1.如果string的长度为0的话,直接返回0,反之就通过算法算出他的hashCode值

intern方法

如果常量池中有当前String的值,就返回这个值,如果没有就加进去,返回这个值的引用,

String对“+”的重载

+号会创建一个StringBuilder对象,然后调用的他的append方法将wustor拼接起来,然后在调用append的方法将android拼接起来,最后在电泳他的toString方法。

总结: 

String被final修饰,一旦被创建,无法更改 

String类的所有方法都没有改变字符串本身的值,都是返回了一个新的对象。

如果你需要一个可修改的字符串,应该使用StringBuilder或者 StringBuffer。

如果你只需要创建一个字符串,你可以使用双引号的方式,

如果你需要在堆中创建一个新的对象,你可以选择构造函数的方式。 在使用StringBuilder时尽量指定大小这样会减少扩容的次数,有助于提升效率

本文是参考大神 wustor的文章:https://juejin.im/post/59fffddc5188253d6816f9c1

大神写的更加详细,

上一篇下一篇

猜你喜欢

热点阅读