
1 yufz 2014 年 9 月 2 日 不知道你方法体里怎么操作的,java中除了几种基本数据类型之外都是传引用的。 |
2 buptlee OP @jinyang656 程序里面就是对dist_matrix和clusterSet进行一些修改。 传递引用的意思是不是,传递实参的一个副本,因此对实参的修改不会反应到传进去的参数上? 那如果我希望这种修改能保留,应该怎么做?就像c++的传址那样。thanks. |
3 chocotan 2014 年 9 月 2 日 难道楼主在doSomething里这样了.... dist_matrix=new XXX... |
4 shuson 2014 年 9 月 2 日 main() 声明static没用吧。 试试update后return一下? |
5 Aegwynn 2014 年 9 月 2 日 java根本没有传址的说法,这个是人们从C那边搬过来的概念。 java里面只有传值,不同在于:对基本数据类型,值就是它自身的值;其他是传引用的值。 想要改变对象的值,就不要去改变它的引用即可。 |
6 defaultuser 2014 年 9 月 2 日 @Aegwynn 说的对 |
9 buptlee OP @Aegwynn 能解释一下,“想要改变对象的值,就不要去改变它的引用即可。”这句话的意思吗,thanks。我的逻辑是这样的: while(clusterSet.size()>3){ updateDistMatrix(dist_matrix,clusterSet); } 当然,每次循环,updateDistMatrix()函数体里面有减少clusterSet项数的逻辑。 |
10 jamiesun 2014 年 9 月 2 日 试试不要用函数包裹,直接在循环里顺序执行 doSomething(dist_matrix); doSomething(clusterSet); 八成是方法里改变了引用。 |
12 Aegwynn 2014 年 9 月 2 日 @buptlee updateDistMatrix这个方法的源代码都贴出来看看,主要是对clusterSet的操作部分。 另外建议public void updateDistMatrix(HashMap<Integer ,LinkedList<Node> > dist_matrix,ArrayList<Integer> nearestNodePair,HashMap<Integer,ArrayList<Integer>> clusterSet) 的方法签名改成 public void updateDistMatrix(Map<Integer ,List<Node> > dist_matrix,List<Integer> nearestNodePair,Map<Integer,List<Integer>> clusterSet) |
13 shuson 2014 年 9 月 2 日 @buptlee 对,如果要返回两个值,就不值当再封装后返回了。 看了回复们,我也是觉得doSomething函数中可能改变了参数的引用,类似重新创建了新的引用并update的是这个新引用,导致原来传入的参数的引用没有被方法执行操作。 |
14 buptlee OP 已经贴出来啦,方法签名改成map和list之后有啥好处呢,是不是为了多态?效率上能有所提高吗?thanks |
15 gangsta 2014 年 9 月 2 日 |