您的位置:首页 > 编程语言 > Java开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: