黑马程序员技术交流社区

标题: 参数问题 [打印本页]

作者: 张利    时间: 2012-10-11 14:03
标题: 参数问题
本帖最后由 张利 于 2012-11-12 22:55 编辑


public static void main(String[] args)
{
        Name n=new Name("zhenxing","sun");
        changeName(n);                                                   //调用方法 n指向了新的对象
        System.out.println(n);                                           //结果打印为什么仍是最初的对象
}
public static void changeName(Name n)
{
        n=new Name("yuanyuan","sun");
}

class Name
{
    public String firstName;
    public String lastName;
      
    public Name(String firstName,String lastName)
   {
        this.firstName=firstName;
        this.lastName=lastName;
   }
      
    public String toString()
   {
        return firstName+"-"+lastName;
    }
}
------------------------------------------------------------------------------------------------------------------
public static void swap(int[] arr,int a,int c)                      //对数组中的数据进行互换,结果是移动成功
{
  int temp = arr[a];
  arr[a] = arr[c];  
  arr [c]= temp;
}
为什么对参数进行的操作 有的是可以成功,有的是没有成功?

作者: 宫明星    时间: 2012-10-11 14:09
public static void swap(int[] arr,int a,int b)                      //对数组中的数据进行互换,结果是移动成功
{
   int temp = arr[a];
   arr[a] = arr;
   arr = temp;
}

定义的b跑哪去了?
作者: 张利    时间: 2012-10-11 14:17
宫明星 发表于 2012-10-11 14:09
public static void swap(int[] arr,int a,int b)                      //对数组中的数据进行互换,结果是 ...

b加上中括号发出来就变成粗体了 没注意 不好意思~~  改成c了。。。。。。
作者: 沈佳龙    时间: 2012-10-11 14:24
我自己的感觉应该是,你调用changeName方法时,相当于在自己的方法做中创建了一个新的Name实体为Name n = new Name("yuanyuan","sun"); 不会对主函数中的那个实体产生任何影响。
作者: 梁俊    时间: 2012-10-11 14:50
应该会变吧
作者: Jordon    时间: 2012-10-11 15:26
你把静态方法改成非静态方法,试试。
作者: 曾浩    时间: 2012-10-11 16:05
1.你的参数是String类型的 String类型的数据 被定义后就不会被改变
2.Name n=new Name("zhenxing","sun"); 是定义在方法里面的所以他是一个局部的 局部变量在执行一个方法后 就被释放了
3.changeName中的n=new Name("yuanyuan","sun"); n也是一个局部 主方法中的n和changeName方法中的n不是同一个变量
4.因为你这个方法是一个静态的方法在类加载是就已经加载了 并且你的参数中的局部变量也就定义好了也就是说n=new Name("yuanyuan","sun"); 这句话其实是赋值给了参数中的n 而主方法中的n只是作为参数传递了一下



作者: 杨政    时间: 2012-10-11 16:43
public static void changeName(Name n)

changeName()方法是静态的,先于对象存在。所以changeName(Name n)传入的参数Name n不是你建立的

那个name对象n(仅仅是个参数符号而已),这样就没有达到改变n的目的。打印的依然是main中建立的name

对象n。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2