java中把对象作为参数传递的理解

环境

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山鬼谣me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值