import java.lang.reflect.Field;
public class ModifyStr {
public static void ModifyString(String s){
String tmp = "想改就改,怎么着吧";
Class cls = s.getClass();
try {
Field offset = cls.getDeclaredField("offset");
offset.setAccessible(true);
offset.setInt(s, 0);
Field count = cls.getDeclaredField("count");
count.setAccessible(true);
count.setInt(s, tmp.length());
Field value = cls.getDeclaredField("value");
value.setAccessible(true);
value.set(s, tmp.toCharArray());
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args){
// TODO Auto-generated method stub
String s = "什么都行";
ModifyString(s);
System.out.println(s);
}
}
import java.lang.reflect.Field;
public class SwapString {
public void swap(String str1, String str2){
String tmpStr = new String(str1);
Class cls = String.class;
try {
Field offset = cls.getDeclaredField("offset");
Field count = cls.getDeclaredField("count");
Field value = cls.getDeclaredField("value");
offset.setAccessible(true);
count.setAccessible(true);
value.setAccessible(true);
offset.setInt(str1, 0);
count.setInt(str1, str2.length());
value.set(str1, str2.toCharArray());
offset.setInt(str2, 0);
count.setInt(str2, tmpStr.length());
value.set(str2, tmpStr.toCharArray());
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
SwapString ss = new SwapString();
String s1 = "String1";
String s2 = "String2";
System.out.println("Before Swap :/n s1 = "+s1+", s2 = "+s2);
ss.swap(s1, s2);
System.out.println("After Swap :/n s1 = "+s1+", s2 = "+s2);
}
}
public class SwapString {
public void swap(String str1, String str2){
Class cls = String.class;
try {
Field offset = cls.getDeclaredField("offset");
Field count = cls.getDeclaredField("count");
Field value = cls.getDeclaredField("value");
offset.setAccessible(true);
count.setAccessible(true);
value.setAccessible(true);
int offset1 = offset.getInt(str1);
int count1 = count.getInt(str1);
Object value1 = value.get(str1);
int offset2 = offset.getInt(str2);
int count2 = count.getInt(str2);
Object value2 = value.get(str2);
offset.setInt(str1, offset2);
count.setInt(str1, count2);
value.set(str1, value2);
offset.setInt(str2, offset1);
count.setInt(str2, count1);
value.set(str2, value1);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
SwapString ss = new SwapString();
String s1 = "String1";
String s2 = "String2";
System.out.println("Before Swap : s1 = "+s1+", s2 = "+s2);
ss.swap(s1, s2);
System.out.println("After Swap : s1 = "+s1+", s2 = "+s2);
}
}