精华内容
下载资源
问答
  • 通过反射修改String的内容 String str = "hello"; //源码中的value数组 Field filed = String.class.getDeclaredField("value"); //设置可访问 filed.setAccessible(true); //得到value数组 char[] chars = ...

    通过反射修改String的内容

        String str = "hello";
        //源码中的value数组
        Field filed = String.class.getDeclaredField("value");
        //设置可访问
        filed.setAccessible(true);
        //得到value数组
        char[] chars = (char[])filed.get(str);
        //修改
        chars[0] = 'w';
        System.out.println(str);
    展开全文
  • 反射修改String的内容

    2021-01-18 22:54:59
    import java.lang.reflect.Field; public class Main{ public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { //反射是和封装背道而驰的1... //通过反射方式修改String
    import java.lang.reflect.Field;
    
    public class Main{
        public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
            //反射是和封装背道而驰的1使用反射可能打破封装,代码复杂容易出错
            //反射牺牲了编译器自身的检验机制,更需要人工保证代码的正确性
            //通过反射方式修改String的内容
            //特殊手段不是常规手段
    
            String str="hello";
            //(1)获取到String的类对象
            //(2)根据value这个字段名字,在类对象中拿到对应字段(仍然是图纸的一部分,相当于局部放大)
            Field valueField= String.class.getDeclaredField("value");
            valueField.setAccessible(true);
            //(3)根据图纸拆开str这个对象,取出里面的零件
            //让value这个private的成员也能被访问到
            char[] value =(char[])valueField.get(str);
    
            //(4)修改零件内容
            value[4]='a';
    
            System.out.println(str);
        }
    
    
    
    }
    

    这里注意如果使用这个版本的jdk就会有以下报错在这里插入图片描述

    WARNING: An illegal reflective access operation has occurred
    WARNING: Illegal reflective access by Main (file:/E:/Mianxiangduixaing/out/production/Mianxiangduixaing/) to field java.lang.String.value
    WARNING: Please consider reporting this to the maintainers of Main
    WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
    WARNING: All illegal access operations will be denied in a future release
    Exception in thread "main" java.lang.ClassCastException: [B cannot be cast to [C
    	at Main.main(Main.java:17)
    
    Process finished with exit code 1
    

    使用这个版本的jdk就会编译成功在这里插入图片描述
    在这里插入图片描述

    展开全文
  • java反射修改String

    2020-12-29 12:23:01
    String类之所以说是无法被修改,原因在于类本身以及成员变量都被final修饰了。如下 其中可以看到,字符串是以char[ ]的...因此利用反射获取私有成员变量后,就可以达到修改String值的目的。 String s1 = "abc";

    String类之所以说是无法被修改,原因在于类本身以及成员变量都被final修饰了。如下

    其中可以看到,字符串是以char[ ]的形式保存在value内的。

    value虽然被final修饰了,但我们知道,value是数组类型的,是一个引用,value本身只是一个地址,指向堆里真正的数组实例。我们无法修改value的地址值,但却可以获取地址后,利用地址修改数组的内部元素。

    因此利用反射获取私有成员变量后,就可以达到修改String值的目的。

            String s1 = "abc";
            System.out.println(s1);
            System.out.println(s1.hashCode());
    
            Class aClass = s1.getClass();
            try {
                Field value= aClass.getDeclaredField("value");
                //设置私有成员变量可访问
                value.setAccessible(true);
                //反射无法直接修改final修饰的成员变量
    //          f.set(s1, "bcd");
                //获取String类value指向的地址,并赋值给o1
                char[] o1 = (char[])value.get(s1);
                //利用o1修改地址所指向的char数组
                o1[0] = 'b';
                System.out.println(s1);
                System.out.println(s1.hashCode());
    
            } catch (NoSuchFieldException | IllegalAccessException e) {
                e.printStackTrace();
            }

    但类似的操作对Integer等其他封装类无效,因为它们的value是基础数据类型,value内保存的是实际的值,无法通过获取地址的方式,改变其值。

     

    展开全文
  • public class Main { public static void main(String[] args) { //实践传值修改String String string = "我不该生气吗?"; System.out.println(string); modifyString(string); ...
    public class Main {
        
        public static void main(String[] args) {
            //实践传值修改String
            String string = "我不该生气吗?";
            System.out.println(string);
            modifyString(string);
            System.out.println(string);
        }
    
        public static void modifyString(String string) {
            try {
                Field field = String.class.getDeclaredField("value");
                field.setAccessible(true);
                field.set(string, field.get("我该如何面对你?"));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
    }
    

    在这里插入图片描述

    展开全文
  • Java反射修改String内容

    2019-05-28 16:21:33
    public class Demo{ public static void main(String[] args) throws Exception { String str="abc"; Field valueField=str.getClass().getDeclaredField("value"); valueField.setAcce...
  • 》,题主最后通过反射机制修改String 内部的char[] 对象的值,最终完成了String修改。这里先上原博主的示例:// 创建字符串"Hello World", 并赋给引用s String s = "Hello World"; System.out.println("s = ...
  • 》,题主最后通过反射机制修改String 内部的char[] 对象的值,最终完成了String修改。这里先上原博主的示例:// 创建字符串"Hello World", 并赋给引用s 运行结果s 看完这个问题,我的第一反应是,修改完成之后...
  • public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, ClassNotFoundException { String...
  • 1. 反射机制概述 ① 反射机制的含义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的...
  • 我们都知道,String是java中的字符串,是不可变的,对String类的任何改变,都是返回一个新的String类对象。...public class 反射String {public static void main(String[] args) {String s1 = "abcd";S...
  • 使用两种方式修改String的值:1.反射2.Unsafe代码示例:import java.lang.reflect.Field;...public class ModifyString {/*** 反射修改String* @throws Exception* 2014年9月23日*/@Testpublic voi...
  • 使用两种方式修改String的值:1.反射2.Unsafe代码示例:import java.lang.reflect.Field;...public class ModifyString {/*** 反射修改String* @throws Exception* 2014年9月23日*/@Testpublic voi...
  • Java反射-修改String常量

    千次阅读 2016-08-04 10:34:57
    我们都知道,String是java中的字符串,...但如果非要改变它也不是不可以,利用反射就可以做到。 import java.lang.reflect.Field; public class ReflectString { public static void main(String[] args) { Strin
  • 目的变更String对象里面的值方法采用反射技术,获取String里面的值,并改变代码通过反射技术替换掉String.../*** @auther::9527* @Description: 修改String的内容* @program: jstl2* @create: 2019-10-03 19:02*...
  • 可见,一旦修改了一个String常量的值,所有字符串和它相等的变量的值都会改变,据说是因为它们在底层都是用的同一份数据,没验证。。。 嗯,强行改人家String的值有什么意义呢,除了真的很危险暂时还没想出来。。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 640
精华内容 256
关键字:

反射修改string