为什么字符串String是不可变字符串
实际上String类的实现是char类型的数组
虽然说源码中设置的是private final char[] value;
final关键词表示不可变动
但是只是不能直接在value这个数组的引用地址入手
还是可以在数组value中进行更改
像是value[2] = 1;
但是设计者巧妙地避开了这个坑
还把数组设为final
public static void main(String[] args) { final char[] value = {1,2,3,4}; char[] v = new char[4]; value = v;}
public static void main(String[] args) { final char[] value = {1,2,3,4}; value[2] = 6; System.out.println(value);}
虽然字符串本身不能改
但是可以改字符串变量指向另一个字符串的地址
而且字符串是有一个共享的字符串常量池(这里等我读《深入Java虚拟机》之后再填坑)
所以如果复制一个字符串变量
原始字符串与复制的字符串共享相同的字符
其实也是因为java的特性之一------没有可以直接改变内存变量的指针
"".equals(str)与str.equals("")的区别
"".equals(str)这种写法可以规避系统报空指针异常错误
1 class Solution {2 private static String a;3 public static void main(String[] args) {4 if("".equals(a))5 System.out.println("''.equals(a)");6 if(a.equals(""))7 System.out.println("a.equals('')");8 }9 }