java中把对象作为参数传递的理解
2017-12-29 14:24
281 查看
环境
jdk:1.7前言
今天在写程序时,发现一个问题:
//发行结果公告日期 Date olissuePublishDate = o.getDate("olissue_publish_date"); isSpecialDate(olissuePublishDate); map.put("olissue_publish_date", olissuePublishDate);
下面这个方法是:要是日期为
1900-01-01,就把其置为空。
/** * 特殊判断处理 * @param issuePublishDate * @return * @author yutao * @date 2017年12月29日下午1:25:48 */ public static Date isSpecialDate(Date issuePublishDate) { if(issuePublishDate == null){ return null; } if(DateUtil.compare(issuePublishDate, DateUtil.stringToDate("1900-01-01", "yyyy-MM-dd")) == 0){ issuePublishDate = null; } return issuePublishDate; }
我是希望通过方法
isSpecialDate来改变外面
olissuePublishDate的值
结果发现并没与成功:
map.put("olissue_publish_date", olissuePublishDate);
得到的数据,还是
1900-01-01,而不是
null。
对象 – 引用传递
因为在我的记忆里,对象是按照引用传递的,所以在调用这个isSpecialDate(olissuePublishDate);方法时,如果方法内部改变了对象,那么外部的也会得到改变。
网上查询资料后,才知道
java本质上只有
按值传递;
只有一种参数传递机制 – 按值传递
无论引用类型或基本类型,当作为参数传递给一个方法时,两种类型都是按值传递的。按值传递意味着当将一个参数传递给一个方法时,方法接收的是原始值的一个副本。
Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。
只不过,当把对象作为参数传递时,可以通过该副本引用改变该对象的的属性。
而我上面程序在方法里
issuePublishDate = null;这里已经对变量重新赋值了。此时的变量
issuePublishDate已经不再是参数传进来的那个引用啦!所以自然就不会影响外面的原值。
参考地址:
java语言中 map值传递和引用传递的问题?
https://www.cnblogs.com/tjlgdx/p/5991399.html
相关文章推荐
- java 对象作为方法的参数传递
- Java 把对象作为参数传到一个方法里,这个是值传递还是引用传递, 为什么结果这么怪?
- Java 对象作为参数传递的相关原理研究
- 重新理解Java -- 类型、值、对象、参数传递
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- 重新理解Java -- 类型、值、对象、参数传递
- Java传递基本类型:值传递,对象作为参数:引用传递
- 关于Java对象作为参数传递是传值还是传引用的问题
- 【java】值传递和引用传递---对象作为方法的参数传入属于哪种传递
- Java 对象作为参数传递的相关原理研究
- 我的Java开发学习之旅------>Java String对象作为参数传递的问题解惑
- Java中接口对象作为参数传递
- java中将对象作为参数的本质
- java 基础 String和StringBuffer在作为参数传递时的区别
- Java入门 之 类和对象(四) - 参数传递
- 在Java中方法参数的传递,对象是传递引用
- 我的理解:Java 中方法的参数全部都是按“值”传递的
- 用"堆栈区数据复制"理解Java赋值和参数传递?机制的心得
- Java学习笔记43. 使用对象作为方法的参数
- java中对象引用,特别作为参数时候注意事项