关于JAVA类的对象的引用

代码如下:
import java.util.Date;
public class Test {
public static void main(String[] args){
Date date=new Date(1234567);

    m1(date);
    System.out.println(date.getTime());
}

public static void m1(Date date){
    date=new Date(7654321);
}

}
为什么结果是:1234567不是7654321

方法中的变量是临时的,执行方法时,临时遍历date,被new了一个新的值,覆盖了原来的内容,,但是date并没有呗改变。

图片说明

通过引用可以改变main中date的值,,测试方法如下:

    public static void main(String[] args) {
        Date date = new Date(1234567);
        m1(date);
        System.out.println(date.getTime());
    }

    public static void m1(Date date) {
        date.setTime(7654321);
//        date = new Date(7654321);
    }

因为传过去的是值而不是地址,方法接收形参后再开辟一个空间存值,方法结束后进行垃圾回收,而原来的地址存的值是没有变的。建议方法返回一个值,main里面再接收即可

图片说明

修改代码如下:

 import java.util.Date;
public class Test {
public static void main(String[] args){
Date date=new Date(1234567);
    date =m1(date);
    System.out.println(date.getTime());
}

public static Date m1(Date date){
    date=new Date(7654321);
        return date;
}
}

main里面的date是对应1234567,m1方法里面的date开始是对应1234567,但在执行时改变的仅仅m1方法里面的date,main里面的date没有任何改变,如果m1方法的形参改变一下,不再是daate,那么main的date会被改变。我觉得你是被两个相同的date弄晕了。

因为你加载了两次 代码不要变只要是静态加载的就是7654321 相信不相信吧

你们都试了吗?打印的明明就是7654321,楼主你确定执行代码了?

因为传过去的是值而不是地址,你又新new了一个date,新new出来的date 覆盖了之前的date

传地址还是传值要搞清楚。。。。。。。

图片说明