资讯专栏INFORMATION COLUMN

java中的String为什么是不可变的

cfanr / 768人阅读

摘要:什么是不可变对象如果一个对象,在它创建完成后,不能在改变它的状态,那么这个对象就是不可变的。而在中,是封装的数组,是在这个数组中的起始位置,是所占的字符的个数。

这是之前在网上看到的一个问题,我就是总结一下。
什么是不可变对象:
如果一个对象,在它创建完成后,不能在改变它的状态,那么这个对象就是不可变的。不能改变这个对象的状态就是:不改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。

String类是一个final类,是不能被继承的

区分对象和对象的引用

public class Person {
    public static void main(String[] args) {
        String s = "abcd";

        System.out.println("s = "+s);
        s = "123456";

        System.out.println("s = "+s);
    }


}

这里的s看上去被改变了,但是s却是String对象的引用,它指向了一个具体的对象,而s的改变其实就是它所指向的对象发生了改变。

private final char value[];

//String是将输入的字符串封装为字符数组value[]就是这个数组的长度

private int hash;

//是对象的哈西值的缓存

以上是JDK 1.7中的String源代码,由以上代码可以看出
String其实就是对字符数组的封装,在java中数组也是对象,value也只是一个引用,它指向了一个真正的数组对象。而在JDK 1.6中, value是String封装的数组,offset是String在这个value数组中的起始位置,count是String所占的字符的个数。也可以得出这个结论的

并且我们发现value,offset,count都是private final,并且类中也没有提供get()和set()方法。这点也可以看出String是无法修改的.

谢谢:http://www.importnew.com/16817.html提供的文章

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66183.html

相关文章

  • StringString类型什么可变

    摘要:性能当字符串是不可变时,字符串常量池才有意义。字符串常量池的出现,可以减少创建相同字面量的字符串,让不同的引用指向池中同一个字符串,为运行时节约很多的堆内存。 在学习Java的过程中,我们会被告知 String 被设计成不可变的类型。为什么 String 会被 Java 开发者有如此特殊的对待?他们的设计意图和设计理念到底是什么?因此,我带着以下三个问题,对 String 进行剖析: ...

    zhiwei 评论0 收藏0
  • Java String是不可变吗?

    摘要:我们都知道中的类的设计是不可变的,来看下类的源码。其值也就是对字符数组的封装,即,其值被定义成的,说明不能通过外界修改,即不可变。真的不可变吗来看下面这个例子。所以说,这里的字符串并不是可变,只是变更了字符串引用。 我们都知道 Java 中的 String 类的设计是不可变的,来看下 String 类的源码。 public final class String implemen...

    April 评论0 收藏0
  • JavaString可变

    摘要:但是通过构造函数的并不是。通过构造函数创建的变量在机制上与其他对象一致,都是在上创建新的对象,然后把引用赋给变量。此外,的方法和等方法实现均是调用了构造函数创建了新的对象,所以他们返回的也都是存在于上的新对象。 String经常在一个语言中或多或少都有些特殊地位。在Java亦不例外。今天先来讨论,String是不可变的。 String是引用类型,String变量储存一个地址,地址指向内...

    atinosun 评论0 收藏0
  • 第3章:抽象数据类型(ADT)和面向对象编程(OOP) 3.1数据类型和类型检查

    摘要:所有变量的类型在编译时已知在程序运行之前,因此编译器也可以推导出所有表达式的类型。像变量的类型一样,这些声明是重要的文档,对代码读者很有用,并由编译器进行静态检查。对象类型的值对象类型的值是由其类型标记的圆。 大纲 1.编程语言中的数据类型2.静态与动态数据类型3.类型检查4.易变性和不变性5.快照图6.复杂的数据类型:数组和集合7.有用的不可变类型8.空引用9.总结 编程语言中的数据...

    zhangqh 评论0 收藏0
  • 最最最常见Java面试题总结——第二周

    摘要:与都继承自类,在中也是使用字符数组保存字符串,,这两种对象都是可变的。采用字节码的好处语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。 String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性...

    yearsj 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<