代码如下:
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
传地址还是传值要搞清楚。。。。。。。