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”没有被改变,只是等待垃圾回收机制工作,将其回收而已;