class Birthday {
int day;
int month;
int year; public Birthday (int d,int m,int y){
day = d;
month = m;
year = y;
}  void setDay (int d) {
 d = day;
 }
 
 void setMonth (int m) {
 m = month;
 }
 
 void setYear (int y) {
 y = year;
 }
 
 public int getDay () {
 return day;
 }
 
 public int getMonth () {
 return month;
 }
 
 public int getYear () {
 return year;
 }  public void display () {
 System.out.println(day + "." + month + "." + year);
 }
}public class Test {
public static void main (String args[]) {
Test test = new Test();
int date = 9;
Birthday d2 = new Birthday(6,8,2012);
test.change1 (date);
System.out.println("date=" + date);
test.change2 (d2);
d2.display();
} public void change1 (int i) {
i=1234;

}


public void change2 (Birthday b1) {
b1.setDay(21);
}
}为什么打印出来date还是9而不是1234,d2对象调用的display还是(6,8,2012),而不是(21,8,2012)呢,请问要怎么修改才能够变成我想要的结果呢???谢谢!!!

解决方案 »

  1.   

    第一个问题, int是简单类型,不会改变实参的值,所以date还是9
    第二个问题,是因为你Birthday里的set方法全部是错误的, d = day, m = month, y = year,这都是反的。
    应该是day = d
      

  2.   

    基本型 是值传递,再内存中是copy一份传过去,不管copy的这一份怎么改变都不会影响到初始值的,因为初始值的引用的物理地址的数据没有改变。
      

  3.   

    请问有高手告诉我date那个问题怎么解决吗?
      

  4.   


    这是强人所难.
    public void change1 (int i) 这样进行的值传递是无法做到修改那个的值的..真要做的话可以考虑用返回值咯.
    public int change1(int i){
        return 1234;
    }//main
    int date = 9;
    date = test.change1 (date);
      

  5.   

    test.change1 (date);
    //System.out.println("date=" + date);
    public void change1 (int i) {
    i=1234;
    System.out.println(i);