public class Test {        /**
         * @param args
         */
        public static void main(String[] args) {
              
                Map map=new HashMap();
                map.put("key", "2");
                String[] body =new String[10];
                body[0]="1";
                body[4]="3";
                body[5]="4";
                body[6]=(String)map.get("key");
                map.put("key", "haha");
                for(int i=0;i<body.length;i++){
                        String temp=body[i]==null? " ":body[i];
                       System.out.println("["+temp+"]");
                }
                
        }}
请问如何能让body[6]打印出的是haha
body[6]-->key--->2现在key---->haha。

解决方案 »

  1.   

    body[6]=(String)map.get("key");
    map.put("key", "haha");改成:
    map.put("key", "haha");
    body[6]=(String)map.get("key");不就行了?? 改了值后,要重新赋值.
      

  2.   

    import java.util.*; class Test {
            public static void main(String[] args) {                Map map=new HashMap();
                    map.put("key", "haha");
                    String[] body =new String[10];
                    body[0]="1";
                    body[4]="3";
                    body[5]="4";
                    body[6]=(String)map.get("key");
    //              map.put("key", "haha");
                    for(int i=0;i<body.length;i++){
                            String temp=body[i]==null? " ":body[i];
                           System.out.println("["+temp+"]");
                    }
                  }
          }
    //主要是这个方法map.get("key")所放的位置只要前面有映射,则返回指定键在此标识哈希映射中所映射的值。否则就为null
    //后面的这个方法map.put("key", "haha")如果没有这个方法map.get("key")反回所映射的值它就没有用。
      

  3.   

    1楼说的方法是单从结果上是对的,但是我的程序程序逻辑上不能用。
    2楼个方法也不符合我的要求。我的想法是body[6]=2,就是指向一块内存,存储的值是2.当我用其他方法把这块区域的值变化了,这时body[6]取出的值就应该是变化好的值。小弟愚钝,请大家帮忙啊!
      

  4.   

    java不能直接操作内存,如果你要String[]来保存一个对象的引用是不能实现的,有一个思路可以解决你的问题就是自己在创建一个类并声明一个该类的数组,然后在这个类中可以保存一个对象的应用,输出时可以调用该类的toString()方法即可
      

  5.   

    楼主不要再想这个方案了,在java里是不可能的。java的String在定义之后就不可以改变了,除非从新赋值。你只能在你的设计思路上去改变来满足你的需求。
      

  6.   

    的确,在改变map中的映射值时,已赋值到数组中的值是不会改变的
    要是必须用数组解决问题的话,下面我给出一个解决方法,或者楼主
    自己根据需求自己进行设计:import java.util.HashMap;
    import java.util.Map;class StringProxy{
    String str = null;
    public StringProxy() {
    this(null);
    }

    public StringProxy(String str) {
    this.str = str;
    }

    public void setStr(String str) {
    this.str = str;
    }

    public String getStr() {
    return str;
    }
    }public class Test { public static void main( String[] args ) {
    Map<String,StringProxy> map = new HashMap<String, StringProxy>();
    map.put("key", new StringProxy("2"));
          StringProxy[] body =new StringProxy[10];
          body[0]=new StringProxy("1");
          body[4]=new StringProxy("3");
          body[5]=new StringProxy("5");
          body[6]=map.get("key");
          map.get("key").setStr("haha");
          for(int i=0;i<body.length;i++){
                  String temp=body[i]==null? "":body[i].getStr();
                 System.out.println("["+temp+"]");
          } }
    }
      

  7.   

    上面的代码用一个代理类StringProxy来处理String的引用
    使用的时候对这个代理类来进行相应的set和get方法
      

  8.   


    你的意思就是给body[6]一个引用变量x存放它的地址,然后去改变x从而这个body[6]也得到改变是吧,
    这是c的语句java根本就不支持啊!!
    就是: 
    int a=1;
    int &b=a;
     b=2;
    则a也相应的变为了2  。
    不过这只能在c语言里面才能实现,在java里面是语法错误的!!!!
      

  9.   

    Java不能直接操作内存吧  而且是值传递的
      

  10.   

    Java不能直接操作内存,String也是只读的,要改变值,只能赋予新的引用。
      

  11.   

    JF  回帖是一种美德!传说每天回帖即可获得 10 分可用分!
    hao hao