关于引用的问题

vincent343425185 2008-09-20 01:43:02

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

。。。。
...全文
175 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsh5460 2008-09-21
  • 打赏
  • 举报
回复
JF 回帖是一种美德!传说每天回帖即可获得 10 分可用分!
hao hao
justinavril 2008-09-20
  • 打赏
  • 举报
回复
Java不能直接操作内存吧 而且是值传递的
cursor_wang 2008-09-20
  • 打赏
  • 举报
回复
还是要把java的基础打好.
lizhanlang 2008-09-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 vincent343425185 的回复:]
1楼说的方法是单从结果上是对的,但是我的程序程序逻辑上不能用。
2楼个方法也不符合我的要求。

我的想法是body[6]=2,就是指向一块内存,存储的值是2.当我用其他方法把这块区域的值变化了,这时body[6]取出的值就应该是变化好的值。小弟愚钝,请大家帮忙啊!
[/Quote]

你的意思就是给body[6]一个引用变量x存放它的地址,然后去改变x从而这个body[6]也得到改变是吧,
这是c的语句java根本就不支持啊!!
就是:
int a=1;
int &b=a;
b=2;
则a也相应的变为了2 。
不过这只能在c语言里面才能实现,在java里面是语法错误的!!!!
qusic 2008-09-20
  • 打赏
  • 举报
回复
上面的代码用一个代理类StringProxy来处理String的引用
使用的时候对这个代理类来进行相应的set和get方法
qusic 2008-09-20
  • 打赏
  • 举报
回复
的确,在改变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+"]");
}

}
}


qj123456_0 2008-09-20
  • 打赏
  • 举报
回复
楼主不要再想这个方案了,在java里是不可能的。java的String在定义之后就不可以改变了,除非从新赋值。你只能在你的设计思路上去改变来满足你的需求。
huoyin 2008-09-20
  • 打赏
  • 举报
回复
java不能直接操作内存,如果你要String[]来保存一个对象的引用是不能实现的,有一个思路可以解决你的问题就是自己在创建一个类并声明一个该类的数组,然后在这个类中可以保存一个对象的应用,输出时可以调用该类的toString()方法即可

[Quote=引用 3 楼 vincent343425185 的回复:]
1楼说的方法是单从结果上是对的,但是我的程序程序逻辑上不能用。
2楼个方法也不符合我的要求。

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

我的想法是body[6]=2,就是指向一块内存,存储的值是2.当我用其他方法把这块区域的值变化了,这时body[6]取出的值就应该是变化好的值。小弟愚钝,请大家帮忙啊!
lizhanlang 2008-09-20
  • 打赏
  • 举报
回复
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")反回所映射的值它就没有用。
内存泄漏 2008-09-20
  • 打赏
  • 举报
回复
body[6]=(String)map.get("key");
map.put("key", "haha");

改成:
map.put("key", "haha");
body[6]=(String)map.get("key");

不就行了?? 改了值后,要重新赋值.
homesos 2008-09-20
  • 打赏
  • 举报
回复
Java不能直接操作内存,String也是只读的,要改变值,只能赋予新的引用。

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧