String 类型的是final 不是说final类型的不可以修改吗 为啥本人可以修改String变量的值

J2EE 码拜 3年前 (2017-04-12) 645次浏览
String  s = “123”  ;
void test () {
s=”456″;
System.out.println(s);
}
public static void main(String[] args) {
new  Test8().test();
}
s是String类型的  一开始赋值是”123″
后来本人把它改成了”456″
不是说String 类型的不可以修改的吗
解决方案

10

你要知道String指向的是堆上一块内存地址,那块里面的东西是可以改变的,只是说这个引用指向的地址不能变
同时 String类做过特殊处理 任何试图改变原对象的方法所获得的都是原对象的一个拷贝

10

final 用来修饰类,表示此类不可以被继承,也就是此类没有子类
对于String来说,假如一个变量str的类型是String的,那么str.class==String.class一定是成立的
假如不是final类,如Student继承Person类,那么 Person p=new Student(),那么显然p.class !=Person.class
还有一点,String类的里面的很多属性是final的,也就是说不能通过反射来改变里面字段的值
lz你改变的变量的引用或指针,并不是改变了变量所指向的那个对象的值
当然假如变量用final修饰,那么此变量也不可重新赋值的(指向另外一个对象)

10

String不是final的,而是Immutable(不可变类),即属性值不可变,你可以简单理解为一个字符串对象的内容不可变
为什么可以二次赋值?
当你第二次为一个String变量赋值时,实际上是重新创建的一个String对象,将这个新创建的对象引用赋值给之前的String变量,也就是说这个时候产生了两个对象,而不是同一个对象改变了值。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明String 类型的是final 不是说final类型的不可以修改吗 为啥本人可以修改String变量的值
喜欢 (0)
[1034331897@qq.com]
分享 (0)