String修饰的类不能被修改到底是什么意思?

String是字符串常量,查看源码我们很容易知道String是被final修饰,一旦申明不可以变改变,那就有疑惑了,那既然String类不可以被修改,那平时我们申明变量
String s="abc";
s="efg";
System.out.println(s);

很容易可以得出efg;

而String是被final修饰,应该不能被改变?

其实这里应该明白一件事,String不是八大基本数据类型,它是一个引用类型,

它申明变量

String s="abc";

其是等价于

String s=new String("abc");

这里是s其实是一个地址引用,它指向的是存在于堆中的abc,简单概括就叫:栈引用指向堆对象;

而如下修改变量的方式

String s="abc";
s="efg";

改变的只是将s指向下一个对象“efg”;而原来的对象“abc”没有被改变,只是等待垃圾回收机制工作,将其回收而已;





猜你喜欢

转载自blog.csdn.net/weixin_41808376/article/details/80981645