美文网首页
String类和字符串不可变

String类和字符串不可变

作者: 骑着白龙马的猪八戒 | 来源:发表于2019-08-18 10:51 被阅读0次

    实例化String对象

    方法一:直接赋值     String name1 = "zhangsan"; //直接赋值

    创建的对象在字符串池中,如果存在就不再创建,不在的话也不创建

    方法二:  new 一下       String name2 = new String("zhangsan"); //new的方式

    可以看到直接赋值方式   name1==name4

    new方式    name2 != name3  说明new的方式不是创建同一区域

    ==和equals比较内容不一样

    ==比较的是引用

    equals比较的是内容

    如果String指向的是一个字符串常量,那么会先在字符串常量池(栈)中查找,如果有就直接指向它;没有则在字符串常量池中创建该常量,然后String指向该常量。

    如果String使用关键字new初始化,则会在堆中开辟固定的空间存放该字符串的值,然后String指向该常量。

    使用字符串常量拼接,由于表达式先计算右值,因此相当于将String指向一个新拼接好的字符串常量。同样会在字符串常量池中查找,如果有就直接指向它;没有则在字符串常量池中创建该常量,然后String指向该常量。但是如果拼接中存在使用new生成的字符串,则新的字符串就等价于使用new在堆中创建的一样。

    修改String的值,只能改变String的指向,不会改变String指向的对象本身。如果非要改变指向的对象本身,可以使用反射。

    如果是数组,由于它是对象,那么equals只比较其数组指针地址,并不会去比较其中的元素是否相等。

    字符串内容不可变,改变后地址改变,不再是同一个

    相关文章

      网友评论

          本文标题:String类和字符串不可变

          本文链接:https://www.haomeiwen.com/subject/wztrkctx.html