java中的传值和传引用深刻体会
来源:互联网 发布:php 工作流 开源 编辑:程序博客网 时间:2024/06/09 17:14
关于Map的例子:
public void A(Map<Integer, String> myMap){ myMap = addMap(myMap, yourMap); //yourMap假设已经定义,并且其中有值 }
public static Map<String,Double> addWeight(Map<String,Double> goldMap,Map<String,Double> preMap) { Map<String,Double> addMap = new HashMap<String,Double>(); for(String s : preMap.keySet()) { if(goldMap.containsKey(s)) { addMap.put(s, (goldMap.get(s) + preMap.get(s))); } else { addMap.put(s, preMap.get(s)); } } for(String str : goldMap.keySet()) { if(!preMap.containsKey(str)) { addMap.put(str, goldMap.get(str)); } } //删除值为空的项 //集合类的都不能在循环的时候删除,因为删除元素后集合发生改变继而不能循环了 //这种删除方式以后不要再用了,严重出错 /*for(String key : cutMap.keySet()) { Double value = cutMap.get(key); if(value == 0.0) { cutMap.remove(key); } }*/ Set mapset = addMap.entrySet(); Iterator iterator = mapset.iterator(); while(iterator.hasNext()) { Map.Entry mapEntry = (Map.Entry)iterator.next(); Double value =(Double)mapEntry.getValue(); if(value == 0.0) { iterator.remove(); } } return addMap; }
方法A的目的是将addMap方法操作后向addMap中填充值,但是结果返回的myMap为空,百思不得其解,询问大牛后才明白,
解释:程序运行时myMap的id=97,进入addWeight方式调试,新创建的addMap的id = 91;
运行完addWeight方法后,A方法的中语句等号左边的myMap的Id = 91, 所以调用A方法的方法B在运行了A方法后myMap为空,因为B方法中的myMap的Id = 97,
总的来说A方法操作的不是传入的myMap了,而是addWeight中的addMap了
第二个问题: 基本类型int作为参数
public void getPredictTrigTypeNum(Segment predictSeg, OutputInfo goldAnswer, String specialTrigType int predictBdTypeNum){ for(int x = 0; x < goldAnswer.goldStructure.size(); x++) { Segment goldSeg = goldAnswer.goldStructure.get(x); int goldSegStart = goldSeg.segmentStart; int goldSegEnd = goldSeg.segmentEnd; if(predictSeg.goldSegment.equals(goldSeg.goldSegment) && predictSeg.segmentStart == goldSegStart && predictSeg.segmentEnd == goldSegEnd) { if(specialTrigType.equals(goldSeg.segmentType)) { predictBdTypeNum += 1;//边界正确类型正确中 A break; } }}}
public void A (){ getPredictTrigTypeNum(predictSeg, goldAnswer, specialTrigType,predictBdTypeNum);}
该方法中 getPredictTrigTypeNum 中的目的是更改参数predictBdTypeNum
方法A调用运行方法getPredictTrigTypeNum后,参数predictBdTypeNum满足条件后会增加1
但是运行后却没有变化,
针对问题1和问题2,传值和传引用能够很好地解释这两个问题
0 0
- java中的传值和传引用深刻体会
- Java中的引用和传值
- Java中的传值引用和传址引用
- 深刻理解C#的传值调用和传引用调用
- 深刻理解C#的传值调用和传引用调用
- 深刻理解Java中的堆和栈
- 深刻理解Java中的堆和栈
- 深刻理解Java中的堆和栈
- JAVA中的传值与传引用
- 复习一下...java中的传值引用
- python中的传值和传引用
- 深刻理解Java中的String、StringBuffer和StringBuilder的区别
- Java中的new关键字和引用传参
- Java中的形参和实参的区别以及传值调用和传引用调用
- Java中的形参和实参的区别以及传值调用和传引用调用
- Java中的形参和实参的区别以及传值调用和传引用调用
- java中的“值传递”和“引用传递”
- java中的值传递和引用传递
- Lua处理中英文混合字符串
- 垃圾收集器与内存分配策略
- ACM_模板_指数型母函数
- zip&&rar
- HUST 1027 Enemy Target!
- java中的传值和传引用深刻体会
- 深入c++ new
- Tomcat优化方案( 一)
- android WebView 缓存
- 第六届蓝桥杯 格子中输出
- WPF的TextBox抛出InvalidOperationException异常:Cannot close undo unit because no opened unit exists.
- excel 实用操作类
- Android SQLite 快速入门
- 【PHP项目部署二】Mysql环境配置