Edd*_*e B 8 java arrays string object chars
我是java的新手,并试图理解该语言的基本要素和基础知识.
是否准确地说Java字符串对象本质上是一个定义为不可变的字符数组的类?
我问这个,因为与char数组和字符串类相比,我对规范感到有点困惑......
10.9字符数组不是字符串在Java编程语言中,与C不同,char数组不是String,字符串和char数组都不会被'\ u0000'(NUL字符)终止.String对象是不可变的,也就是说,它的内容永远不会改变,而char数组有可变元素.类String中的toCharArray方法返回一个包含与String相同字符序列的字符数组.StringBuffer类在可变字符数组上实现有用的方法.
4.3.3类String的类字符串实例表示Unicode代码点的序列.
Jon*_*eet 19
是否准确地说Java字符串对象本质上是一个定义为不可变的字符数组的类?
不是.一个Java String对象(当前 - 这是我收集的实现细节可能正在改变)一个包含几个字段的类:
char[]包含实际字符的A.索引和长度的原因是几个字符串可以包含对它们的引用char[].这被某些操作使用,例如substring(在许多实现中,无论如何).
重要的是API String虽然 - 这与数组的API非常不同.当您考虑JLS定义时,它会考虑您使用的API:a String代表一系列Unicode代码点.所以你可以采用子序列(Substring),找到给定的子序列(indexOf),将其转换为大写序列等.
实际上,将JLS称为UTF-16代码单元序列会稍微准确一些; 完全有可能构造一个不是Unicode代码点的有效序列的字符串,例如,通过包括UTF-16代码单元的"代理对"的一半而不包括另一半.API的某些部分确实处理了String代码单元,但坦率地说,大多数开发人员大部分时间都在处理字符串,就好像非BMP字符不存在一样.