String是字符串常量,查看源码我们很容易知道String是被final修饰,一旦申明不可以变改变,那就有疑惑了,那既然String类不可以被修改,那平时我们申明变量
String s="abc";
s="efg";
System.out.println(s);
很容易可以得出efg;
而String是被final修饰,应该不能被改变?
其实这里应该明白一件事,String不是八大基本数据类型,它是一个引用类型,
它申明变量
String s1="abc";
其是类似于
String s2=new String("abc");
这里是s1其实是一个地址引用,申明s1="abc"后,它会去方法区的字符串常量池创建一个“abc”。然后在栈中生成一个指向“abc”的地址。
而如下修改变量的方式
String s="abc";
s="efg";
改变的只是将s指向下一个对象“efg”;而原来的对象“abc”并没有被改变。