摘要:什么是不可变对象如果一个对象,在它创建完成后,不能在改变它的状态,那么这个对象就是不可变的。而在中,是封装的数组,是在这个数组中的起始位置,是所占的字符的个数。
这是之前在网上看到的一个问题,我就是总结一下。
什么是不可变对象:
如果一个对象,在它创建完成后,不能在改变它的状态,那么这个对象就是不可变的。不能改变这个对象的状态就是:不改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。
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
摘要:性能当字符串是不可变时,字符串常量池才有意义。字符串常量池的出现,可以减少创建相同字面量的字符串,让不同的引用指向池中同一个字符串,为运行时节约很多的堆内存。 在学习Java的过程中,我们会被告知 String 被设计成不可变的类型。为什么 String 会被 Java 开发者有如此特殊的对待?他们的设计意图和设计理念到底是什么?因此,我带着以下三个问题,对 String 进行剖析: ...
摘要:我们都知道中的类的设计是不可变的,来看下类的源码。其值也就是对字符数组的封装,即,其值被定义成的,说明不能通过外界修改,即不可变。真的不可变吗来看下面这个例子。所以说,这里的字符串并不是可变,只是变更了字符串引用。 我们都知道 Java 中的 String 类的设计是不可变的,来看下 String 类的源码。 public final class String implemen...
摘要:但是通过构造函数的并不是。通过构造函数创建的变量在机制上与其他对象一致,都是在上创建新的对象,然后把引用赋给变量。此外,的方法和等方法实现均是调用了构造函数创建了新的对象,所以他们返回的也都是存在于上的新对象。 String经常在一个语言中或多或少都有些特殊地位。在Java亦不例外。今天先来讨论,String是不可变的。 String是引用类型,String变量储存一个地址,地址指向内...
摘要:所有变量的类型在编译时已知在程序运行之前,因此编译器也可以推导出所有表达式的类型。像变量的类型一样,这些声明是重要的文档,对代码读者很有用,并由编译器进行静态检查。对象类型的值对象类型的值是由其类型标记的圆。 大纲 1.编程语言中的数据类型2.静态与动态数据类型3.类型检查4.易变性和不变性5.快照图6.复杂的数据类型:数组和集合7.有用的不可变类型8.空引用9.总结 编程语言中的数据...
摘要:与都继承自类,在中也是使用字符数组保存字符串,,这两种对象都是可变的。采用字节码的好处语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。 String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性...
阅读 1960·2021-11-24 10:45
阅读 1822·2021-10-09 09:43
阅读 1264·2021-09-22 15:38
阅读 1189·2021-08-18 10:19
阅读 2795·2019-08-30 15:55
阅读 3015·2019-08-30 12:45
阅读 2936·2019-08-30 11:25
阅读 329·2019-08-29 11:30