package newGet;public class D3 {
public static void changeDate_1(MyDate mydate) {
mydate = new MyDate(1979, 2, 3);
} public static void changeDate_2(MyDate mydate) {
mydate.setMonth(12); } public static void main(String[] args) {
MyDate date = new MyDate(1981, 9, 10);
changeDate_1(date);
changeDate_2(date);
System.out.println(date.year + "-" + date.month + "-" + date.day);
}
}class MyDate {
public int year; public int month; public int day; public MyDate(int y, int m, int d) {
year = y;
month = m;
day = d;
} public void setMonth(int m) {
month = m;
} public void setDay(int d) {
day = d;
}
}
输出是什么,重要的解释一下为何不是1979-12-3
如果执行:
String a=new String("1");
a=new String("2");
System.out.println(a);
输出肯定是2
两者有什么不同,都是在new对象呀?!====================class Cal{
private int x,y,z;
}
public class D6_exam {
public static void main(String[] args){
Cal tmp=new Cal();
tmp.x=10;tmp.y=20;
}
}//========
public class D6_exam {
private int i=1;
private int j=2;
public static void main(String[] args){
System.out.println((new D6_exam()).i);
}
}
上面同是两代码访问私有属性的问题。为何下面的可以,上面的会报错。
第二个你看看书,private,public,..的访问范围
a=new String("2");
System.out.println(a);当a=new String("2")时,a就从开始指身的new string("1")这个内存单元转到了new String("2")了,原先的内存单元就等着被回收
mydate = new MyDate(1979, 2, 3);
}这个方法没有返回值,传进去的参数 mydate 只在changeDate_1方法内部有效,执行结束后mydate依旧是指向原来的地址,就说说你的changeDate_1方法是毫无作用的,调用了也相当于没调用。
为何changeDate_2发生了作用,它也没有返回值呀
a=new String("2");
System.out.println(a);
输出肯定是2
这个也解释一下吧,因为a原来指向的是new String("1")的地址,但是后来又通过a=new String("2"),这时a指向的就是new String("2")这个对象所在的地址了。所以肯定输出的是2。
在回想一下你的changeDate_1方法并没有把修改后的地址重新赋值给mydate,上面也说了因为你的changeDate_1方法没有返回值。changeDate_1内部的mydate只在其内部的时候有效,离开该方法后就无效了。如果想达到你要的那个效果的话,应该修改一下代码: public static MyDate changeDate_1(MyDate mydate) {
mydate = new MyDate(1979, 2, 3);
}
public static void main(String[] args) {
MyDate date = new MyDate(1981, 9, 10);
date=changeDate_1(date);
changeDate_2(date);
System.out.println(date.year + "-" + date.month + "-" + date.day);
}
mydate = new MyDate(1979, 2, 3);
return mydate;
}
public class D3{
public static MyDate changeDate_1(MyDate mydate) {
mydate = new MyDate(1979, 2, 3);
return mydate;
} public static void changeDate_2(MyDate mydate) {
mydate.setMonth(12); } public static void main(String[] args) {
MyDate date = new MyDate(1981, 9, 10);
date = changeDate_1(date);
changeDate_2(date);
System.out.println(date.year + "-" + date.month + "-" + date.day); }
}class MyDate {
public int year; public int month; public int day; public MyDate(int y, int m, int d) {
year = y;
month = m;
day = d;
} public void setMonth(int m) {
month = m;
} public void setDay(int d) {
day = d;
}
}楼上的我这样是可以的啊!测试结果如下。
运行结果:1979-12-3
但是你可以通过这个“副本“区修改对象内部一些信息。
第二段代码只要了解了各个修饰符的权限就明白了 。
public static MyDate changeDate_1(MyDate mydate) {
mydate = new MyDate(1979, 2, 3);
return mydate;
} public static void changeDate_2(MyDate mydate) {
mydate.setMonth(12); } public static void main(String[] args) {
MyDate date = new MyDate(1981, 9, 10);
date = changeDate_1(date);
changeDate_2(date);
System.out.println(date.year + "-" + date.month + "-" + date.day); }
}class MyDate {
public int year; public int month; public int day; public MyDate(int y, int m, int d) {
year = y;
month = m;
day = d;
} public void setMonth(int m) {
month = m;
} public void setDay(int d) {
day = d;
}
}运行结果:1979-12-3 ,不信自己copy下来试试。
date = changeDate_1(date);