字符串类型是比较特殊的一个类,它的内容保存在一个叫字符串缓冲区的内存空间,字符串变量保存着它的内容的地址,当你给字符串变量赋予新值时,它保存新值所在的地址,也就是说,修改字符串变量实际上没有修改字符串本身,而是新建了一个字符串,然后,原来的变量保存了新字符串的地址,当然,也不一定是新建,因为系统先是去字符串缓冲区查找有没有你要的新字符串,如果有,直接修改字符串变量中保存的地址。
具体到你的问题,当你初始化wordBean时,kanaStr保存了“1”的地址,同理,wordBeanArr的第一个项目也是保存着“1”的地址,当你给wordBean.kanaStr赋新值时,系统先去字符串缓冲区找有没有“孙”,有,将它的地址写入kanaStr,没有,新建一个字符串“孙”,然后将其地址写入kanaStr。从这个过程我们可以发现,wordBeanArr的第一个项目仍然保存着“1”的地址,所以,你输出时,不会输出“孙悟空”。
具体到你的问题,当你初始化wordBean时,kanaStr保存了“1”的地址,同理,wordBeanArr的第一个项目也是保存着“1”的地址,当你给wordBean.kanaStr赋新值时,系统先去字符串缓冲区找有没有“孙”,有,将它的地址写入kanaStr,没有,新建一个字符串“孙”,然后将其地址写入kanaStr。从这个过程我们可以发现,wordBeanArr的第一个项目仍然保存着“1”的地址,所以,你输出时,不会输出“孙悟空”。
你可以试试, 用普通的类型,甚至用基本数据类型,也是这样.
我发现 java5,6,7都是一样结果.
不是字符串的原因.
静态初始化和动态初始化数组都一样.好奇怪