理解不可变
Java中的String是由char[]作为底层,且无set之类的方法修改内部字符数组
String相加
String str="Hello";
String str2=" World";
str=str+str2; sout(str);
str+="!!!"; sout(str);
//结果
Hello World Hello World!!!
String相加的内存变化
字符串运算----不是String对象发生了变化,而是str指向的对象发生了变化
字符串修改
常见方法
借助原字符串加以修改
String str="Hello"
str="h"+str.substring(1);
//结果
hello
特殊方法(反射)
反射概念
破坏封装,访问private对象
反射也叫"自省"
意味着:
获取或者修改某个对象的详细信息,从而让这个对象更好地了解自己
操作
1.取value的值
// 获取 String 类中的 value 字段. 这个 value 和 String 源码中的 value 是匹配的.
Field valueField = String.class.getDeclaredField("value");
2.设访问
// 将这个字段的访问属性设为
true valueField.setAccessible(true);
3.赋值
// 把 str 中的 value 属性获取到.
char[] value = (char[]) valueField.get(str);
4.修改
// 修改 value 的值
value[0] = 'h'; System.out.println(str);
完整代码
String str = "Hello";
// 获取 String 类中的 value 字段. 这个 value 和 String 源码中的 value 是匹配的.
Field valueField = String.class.getDeclaredField("value");
// 将这个字段的访问属性设为
true valueField.setAccessible(true);
// 把 str 中的 value 属性获取到.
char[] value = (char[]) valueField.get(str);
// 修改 value 的值
value[0] = 'h'; System.out.println(str);
// 执行结果
hello