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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵红萍 中级黑马   /  2012-10-25 13:09  /  1402 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我写了一个小例子是交换两个Integer对象的值,在java中的参数如果为基本类型就是用传值调用,对象则是用引用调用是这样吗?我写的程序如下:
private static void swap(Integer value1, Integer value2) {
  Integer temp;
  temp = value1;
  value1=value2;
  value2=temp;
  
}
然后在main方法中调用:
   Integer value1=new Integer(2222);
   Integer value2=new Integer(3333);
   swap(value1,value2);
   System.out.println("value1--->"+value1);
   System.out.println("value2--->"+value2);
可是打印出来的还是原来的值,没有交换啊?这是为什么?java中的引用该怎么用呢?

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 翁鹏 于 2012-10-25 14:07 编辑

Java中 没有 传引用 的,Java总是采用传值调用。方法得到的是所有参数值的一个副本。特别是,方法不能修改传递给他的任何参数变量的内容(因为你修改的是传递给方法的参数副本而已)。   注意,1,一个方法不可能修改一个基本数据类型的参数。(修改完的副本,在方法结束时就被丢弃了)(修改的是副本,与源参数没有半毛钱关系)。         2.关键是 给方法 传引用的副本,方法得到对象引用的副本,对象引用及其他的拷贝引用同一个对象。所以一个方法能够很容易的修改一个所引用的对象的状态。

看了我写的东西,你就能明白了。呵呵

你传递的两个引用的副本值在方法结束时就被丢弃了,你的交换方法中只是交换可两个对象引用副本而已。
回复 使用道具 举报
翁鹏 发表于 2012-10-25 14:01
Java中 没有 传引用 的,Java总是采用传值调用。方法得到的是所有参数值的一个副本。特别是,方法不能修改 ...

那怎么对对象进行引用呢?如果我就想改变它们的值
回复 使用道具 举报
赵红萍 发表于 2012-10-25 14:27
那怎么对对象进行引用呢?如果我就想改变它们的值

我说了你想改变它的值很容易,本身的引用和你传递进方法的副本是指向同一个对象的,所以你就可以轻松改变对象的状态啊。你可调用Integer中的方法改变对象中的状态。但如果你想要交换两个对象的话,做不到。
回复 使用道具 举报
Integer是只读对象,不可能通过调用方法来试图改变原有对象的值。
回复 使用道具 举报
  你这样肯定不对啊 , 引用是这样来玩的
class Student5{
           public  int id ;
           public  String name ;
          
          public Student5(int id)
                {
                     this.id = id;
                  }
          }

        public class Test5
        {
               
            public static void main(String[] args) {
                    Test5 t = new Test5();
                        Student5 student = new Student5(5);
                        System.out.println("++++++交换之前++++++++");
                        System.out.println(student.id);
                        System.out.println("++++++交换之后++++++++");
                        t.swap(student);
                        System.out.println(student.id);
                }
            
            public void swap(Student5 student)
            {
                    student.id = 10;
            }

        }
回复 使用道具 举报
public final class Integer
extends Number
implements Comparable<Integer>

这是jdk里面的,Integer是被final修饰的类,值确定后就不能改变了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马