使用Reflect变态修改String值的方法。
2006-08-28 17:50
405 查看
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);
}
}
import java.lang.reflect.Field;
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);
}
}
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);
}
}
import java.lang.reflect.Field;
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);
}
}
相关文章推荐
- eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?
- 使用storyboard显示UITableView时,如果不修改系统默认生成的tableView:cellForRowAtIndexPath:方法中的代码,则必须为UITableViewCell注册(填写)重用标识符:identifier.必须要代码方法中的标识符一致.
- JAVA String.format 方法使用介绍
- ini_set()函数的使用 以及 post_max_size,upload_max_filesize的修改方法
- [小结]有关GetPrivateProfileString的使用方法
- 用友CDM系统,将货位间商品移库单(一步)修改为内调出入库单(一步)方法使用
- linux下vi命令 修改文件及保存的使用方法
- win32使用OutputDebugString输出调试信息的方法
- STL string使用方法
- String使用equals方法和==分别比较的是什么?
- Java 中 String 类方法的使用
- 使用英文网站模板建站,修改为中文时不显示的解决方法。
- Redhat 7修改默认运行级别方法 --RHEL7使用systemd创建符号链接指向默认运行级别
- qs.parse()、qs.stringify()使用方法
- 在LINQ to SQL中使用Translate方法以及修改查询用SQL 推荐
- NSClassFromString 使用方法
- 支持雅安,修改网页变成灰色及代码修改使用方法
- vc修改列表框LISTBOX的背景颜色及字体颜色及其使用方法
- C# string.TrimEnd方法的使用说明
- MonogDB查询、修改等使用方法整理