A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张利 中级黑马   /  2012-10-11 14:03  /  1385 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张利 于 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;
}
为什么对参数进行的操作 有的是可以成功,有的是没有成功?

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

7 个回复

倒序浏览
public static void swap(int[] arr,int a,int b)                      //对数组中的数据进行互换,结果是移动成功
{
   int temp = arr[a];
   arr[a] = arr;
   arr = temp;
}

定义的b跑哪去了?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
宫明星 发表于 2012-10-11 14:09
public static void swap(int[] arr,int a,int b)                      //对数组中的数据进行互换,结果是 ...

b加上中括号发出来就变成粗体了 没注意 不好意思~~  改成c了。。。。。。
回复 使用道具 举报
我自己的感觉应该是,你调用changeName方法时,相当于在自己的方法做中创建了一个新的Name实体为Name n = new Name("yuanyuan","sun"); 不会对主函数中的那个实体产生任何影响。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
梁俊 黑马帝 2012-10-11 14:50:38
报纸
应该会变吧

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你把静态方法改成非静态方法,试试。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
曾浩 中级黑马 2012-10-11 16:05:47
7#
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只是作为参数传递了一下


评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
杨政 中级黑马 2012-10-11 16:43:07
8#
public static void changeName(Name n)

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

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

对象n。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马