java中的值传递和引用传递

转载 2013年12月05日 11:51:37

值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
下面举例说明:
传值---传递基本数据类型参数
public    class           PassValue{
    static void exchange(int a, int b){//静态方法,交换a,b的值
        int temp;
        temp = a;
        a = b;
        b = temp;
    }
    public static void main(String[] args){
       int i = 10;
       int j = 100;
       System.out.println("before call: " + "i=" + i + "\t" + "j = " + j);//调用前
        exchange(i, j);                                                                    //值传递,main方法只能调用静态方法
        System.out.println("after call: " + "i=" + i + "\t" + "j = " + j);//调用后
    }
}
运行结果:
        before call: i = 10        j = 100
        after    call: i = 10        j = 100
说明:调用exchange(i, j)时,实际参数i,j分别把值传递给相应的形式参数a,b,在执行方法exchange()时,形式参数a,b的值的改变不影响实际参数i和j的值,i和j的值在调用前后并没改变。
引用传递---对象作为参数
如果在方法中把对象(或数组)作为参数,方法调用时,参数传递的是对象的引用(地址),即在方法调用时,实际参数把对对象的引用(地址)传递给形式参数。这是实际参数与形式参数指向同一个地址,即同一个对象(数组),方法执行时,对形式参数的改变实际上就是对实际参数的改变,这个结果在调用结束后被保留了下来。
class Book{
    String name;
    private folat price;
    Book(String n,    float ){                //构造方法
        name = n;
        price = p;
    }
    static  void  change(Book a_book,    String n,    float p){    //静态方法,对象作为参数
            a_book.name = n;
            a_book.price = p;
    }
    public void output(){        //实例方法,输出对象信息
        System.out.println("name: " + name + "\t" + "price: " + price);
    }
}
 public class PassAddr{
    public static void main(String [] args){
        Book b = new Book("java2",    32.5f);
        System.out.print("before call:\t");        //调用前
        b.output();
        b.change(b,    "c++",    45.5f);            //引用传递,传递对象b的引用,修改对象b的值
        System.out.print("after call:\t");            //调用后
        b.output();
    }
}
运行结果:
        before    call:    name:java2        price:32.5
        after       call:    name:c++          price:45.5
说明:调用change(b,"c++",45.5f)时,对象b作为实际参数,把引用传递给相应的形式参数a_book,实际上a_book也指向同一个对象,即该对象有两个引用名:b和a_book。在执行方法change()时,对形式参数a_book操作就是对实际参数b的操作。

java中按值传递和引用传递区别

java中传参方式
  • morgerton
  • morgerton
  • 2017年02月08日 12:54
  • 1080

Java的参数传递到底是引用传递还是值传递

首先看一段代码:public static void main(String[] args) { Person a = new Person(23, "a"); Person b = ...
  • panyongcsd
  • panyongcsd
  • 2016年08月30日 17:14
  • 1836

Java到底是值传递?还是引用传递?

前言 最近和同事讨论算法效率问题无意中涉及到一个问题,java中调用方法的时候是值传递呢?还是引用传递?网上搜索一下相关问题,众说纷纭,有人说值传递,有人说引用传递,还有人说”基础类型是值传递,对象...
  • xiaosha009
  • xiaosha009
  • 2016年02月17日 14:23
  • 1530

JAVA中值传递和引用传递的三种情况

前言我们都知道,java中数据类型分为基本数据类型和引用数据类型。 基本数据类型 - 整型:byte,short,int,long - 浮点型:float,double ...
  • zhzhao999
  • zhzhao999
  • 2016年12月04日 00:14
  • 2155

Java中值传递和引用传递实例

Java中值传递和引用传递实例
  • u012273328
  • u012273328
  • 2016年04月15日 12:05
  • 1267

java中的按值传递和按引用传递

先使用int实验: public class TTEST { private static List mList = new LinkedList(); public static voi...
  • howlaa
  • howlaa
  • 2014年07月15日 16:49
  • 1724

Java中只有值传递,没有引用传递

在Java编程语言中,只有值传递,没有引用传递首先,要明白什么是值传递,什么是引用传递。①值传递的定义就是传递变量的值。②引用传递的定义就是传递变量的地址。现在,举例举例解释下值传递和引用传递,这里先...
  • chenjiatao0909
  • chenjiatao0909
  • 2016年08月09日 16:25
  • 313

几句话弄清楚Java参数传值还是传引用

最近刷题用递归解决关于树的问题的时候,在递归函数调用的时候什么时候传入值,什么时候传入引用有疑问,因为这关系到什么时候我们需要恢复现场,什么时候不需要。在网上搜索了一下,感觉这篇总结的非常简单明了,简...
  • yangliuy
  • yangliuy
  • 2015年01月28日 14:58
  • 16827

一个简单的例子让你理解值传递和引用传递

碰到一些做了好几年java开发的程序员还弄不清楚值传递和引用传递的区别,下面通过一个简单的例子来说明:public class Person { private String name; publi...
  • java_zys
  • java_zys
  • 2016年04月20日 16:36
  • 2979

java基本数据类型传递与引用传递区别详解

java的值传递和引用传递在面试中一般都会都被涉及到,今天我们就来聊聊这个问题,首先我们必须认识到这个问题一般是相对函数而言的,也就是java中的方法参数,那么我们先来回顾一下在程序设计语言中有关参数...
  • javazejian
  • javazejian
  • 2016年04月19日 17:12
  • 13274
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中的值传递和引用传递
举报原因:
原因补充:

(最多只允许输入30个字)