返回信息流@nuanyangyang
我写了一个函数:
public void updateDistMatrix(HashMap<Integer ,LinkedList<Node> > dist_matrix,ArrayList<Integer> nearestNodePair,HashMap<Integer,ArrayList<Integer>> clusterSet)
{
doSomething(dist_matrix);
doSomething(clusterSet);
}
函数是要对传进去的两个参数dist_matrix和clusterSet进行更新,外层是一个循环,不断的调用updateDistMatrix()这个函数,以达到不断更新dist_matrix,clusterSet这两个变量的目的。
但是,我发现,函数里对这两个变量的修改并不能保留到下次迭代,也就是说,下次迭代时,这两个变量的值依然是它们的初始值,我想问下大家,如果我想实现类似于c++的传址(参数)的效果,应该怎么做呢,将dist_matrix,clusterSet在main()前面声明成public static 类型的可以吗?
大神们,教教我。[ema5]
这是一条镜像帖。来源:北邮人论坛 / java / #34324同步于 2014/9/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
大神们,给我讲讲java的传址和传值吧
binxin
2014/9/2镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
关注
【 在 binxin (好好学习,好好科研 | 伪球迷只爱阿森纳) 的大作中提到: 】
: @nuanyangyang
: 我写了一个函数:
: public void updateDistMatrix(HashMap<Integer ,LinkedList<Node> > dist_matrix,ArrayList<Integer> nearestNodePair,HashMap<Integer,ArrayList<Integer>> clusterSet)
: ...................
Java所有都是值传递,函数里使用的是这个值的副本,就算你传引用,函数里也是引用的副本,不过由于引用副本和原引用指向的堆内存地址一样,就好像是传地址似的
lss正解 java里都是值传递 传递引用就像传递c/c++里的指针
【 在 binxin (好好学习,好好科研 | 伪球迷只爱阿森纳) 的大作中提到: 】
: @nuanyangyang
: 我写了一个函数:
: public void updateDistMatrix(HashMap<Integer ,LinkedList<Node> > dist_matrix,ArrayList<Integer> nearestNodePair,HashMap<Integer,ArrayList<Integer>> clusterSet)
: ...................
Java对象保存的都是对象的地址,在函数中更改会保留到下次迭代的啊
可以看看这篇文章:http://bbs.chinaunix.net/thread-719880-1-1.html
简单的写了个测试:
package com.test.main;
import java.util.HashMap;
import java.util.LinkedList;
public class AddressTest {
public static final int key = 1;
public static void main(String[] args) {
Node node = new Node(1);
LinkedList<Node> lNodes = new LinkedList<Node>();
lNodes.add(node);
HashMap<Integer, LinkedList<Node>> matrix = new HashMap<Integer, LinkedList<Node>>();
matrix.put(key, lNodes);
System.out.println("更新前:" + matrix.get(key).getFirst());
updateDistMatrix(matrix);
System.out.println("更新后:" + matrix.get(key).getFirst());
}
public static void updateDistMatrix(
HashMap<Integer, LinkedList<Node>> dist_matrix) {
LinkedList<Node> lNodes = dist_matrix.get(key);
lNodes.getFirst().setX(101);
}
}
class Node {
int x;
public Node(int x) {
this.x = x;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
@Override
public String toString() {
return String.valueOf(x);
}
}
输出结果:
更新前:1
更新后:101
【 在 cowfighting 的大作中提到: 】
: Java对象保存的都是对象的地址,在函数中更改会保留到下次迭代的啊
: 可以看看这篇文章:http://bbs.chinaunix.net/thread-719880-1-1.html
: 简单的写了个测试:
: ...................
我试了下,发现没变化啊,在v2ex上发了贴子,里面有个同学说,不使用函数封装,把updateDistMatrix()函数打开放在while循环里面,我试了下他的方法,可行的。
我自己运行 必须变化呀~ 好吧
【 在 binxin (好好学习,好好科研 | 伪球迷只爱阿森纳) 的大作中提到: 】
: 我试了下,发现没变化啊,在v2ex上发了贴子,里面有个同学说,不使用函数封装,把updateDistMatrix()函数打开放在while循环里面,我试了下他的方法,可行的。
通过『我邮2.0』发布