`
googya
  • 浏览: 143394 次
  • 性别: Icon_minigender_1
  • 来自: 汉川
社区版块
存档分类
最新评论

按值传递(call by value)

    博客分类:
  • Java
 
阅读更多
    按值传递是java比较单纯的体现,虽然真正的内部实现还是按照地址、指针那一套,不过理解起来似乎没有那么裹人!但是还是得小心一点,有时候会出现一些假象,我们应该看清那些东西的本质!
public class CallByValue{
    public static void swap(int a,int b){
	int temp=aa;
	a=db;
	b=temp;
	System.out.println("a="+a+" b="+b);
    }


    public static void main(String[] args){
	
	int a=6;
	int b=9;
	swap(a,b);
	System.out.println("a的值为:"+a+"  b的值为:"+b);
    }
}

    大家应该一眼可以看出来,在swap中毫无疑问是按值传递的。只是传给a、b的副本给swap,在swap中a、b的值变化了,但是main中的a、b丝毫不受影响。这个就是所谓的按值传递!但是下一段代码的传递方式不是那么容易理解,尽管它仍然是按值传递。
public class CallByValue{
    public static void swap(DataObject do_){
	int temp=do_.a;
	do_.a=do_.b;
	do_.b=temp;
	System.out.println("a="+do_.a+" b="+do_.b);
    }


    public static void main(String[] args){
	DataObject dw=new DataObject();
	dw.a=6;
	dw.b=9;
	swap(dw);
	System.out.println("a的值为:"+dw.a+"  b的值为:"+dw.b);
    }
}

   class DataObject{
	int a;
	int b;
    }

    乍一看,好似按引用传递(也就是按照指针),因为a、b的值发生了改变!这难道不足以说明问题吗?如果这样想的话,那就是被这个表象所欺骗!下面我们来仔细分析 一下它。
    dw是一个DataObject的引用,并不是对象本身。当将dw作为参数传给swap的时候,实际上是给swap传递了一个值,只不过这个值所指向的对象和main中的dw指向的是同一个。当通过swap中的do_改变所指对象的时候,这个是改变对象本身了。
    请看下图:


    如果对此还有疑问的话,可以在swap方法最后添加:
    do_=null;
其效果形如下图:



  • 大小: 69.5 KB
  • 大小: 68.6 KB
0
0
分享到:
评论

相关推荐

    详解Java的call by value和call by reference

    call by value(值传递) -------------------- 在Java中,基本数据类型(primitive types)采用call by value方式传递参数。这意味着,当我们将一个基本数据类型的变量传递给一个方法时,实际上是将该变量的值传递...

    JS是按值传递还是按引用传递

    按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。   按引用传递(call by reference)时,函数的形参接收实参的隐式引用,而不再是副本。这意味着函数...

    09.Dictionary.A.hashing.Call-by-value

    Call-by-value是计算机编程中一种参数传递的方式,其含义是当函数调用时,实际参数的值被复制一份传递给函数的形式参数。在函数内部对形式参数的任何修改都不会影响实际参数。Call-by-value与“Call-by-reference”...

    java代码-CallByValue

    2. **对象引用和原始类型**:对于基本类型(如int, char, double等),`Call By Value`意味着传递的是这些类型的值的副本。而对于对象引用,虽然也是按值传递,但传递的是对象引用的副本,而不是对象本身。这意味着...

    JavaScript中的值是按值传递还是按引用传递问题探讨

    这个问题涉及到两种主要的传递方式:按值传递(call by value)和按引用传递(call by reference)。此外,JavaScript中还有一种特殊的传递方式,称为按共享传递(call by sharing)或者按对象传递(call by object...

    一文秒懂java到底是值传递还是引用传递

    在程序设计语言中,按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(call by reference)表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递...

    Java参数传递及值传递实现原理详解

    1. 按值传递(Call by Value) 按值传递是指将实参的值复制给形参,形参的变化不会影响实参的值。这种方式适用于基本数据类型,如int、long、float等。在按值传递中,实参的值被复制到形参中,形参的变化不会影响...

    hs.rar_HS_传递函数hs

    在C语言中,函数参数的传递主要有两种方式:按值传递(Pass by Value)和按引用传递(Pass by Reference)。"函数按值传参"这个文件名表明它主要关注的是按值传递这一机制。 按值传递意味着函数在调用时会复制参数...

    C、C++函数参数传递方式.pdf

    1. 值传递(Call by Value) 值传递是最常见也是最基本的参数传递方式。在值传递中,函数接收的是实参的副本,因此原始数据不会被改变。在给定文档中,值传递的示例为: ```cpp int main(){ void swap(int a, int b...

    对C语言函数参数传递的探讨——以交换问题为例.pdf

    在C语言中,函数调用时的参数传递方式主要分为两种:值传递(Call by Value)和地址传递(Call by Address),也称作传值和传址。 在值传递中,当调用一个函数时,实际参数(实参)的值被复制到形式参数(形参)中...

    Java参数传递PPT

    当讨论方法参数时,有两种术语经常被提及:值传递(Call by Value)和引用传递(Call by Reference)。Java参数传递的规则是:**Java只使用值传递,但这种值传递对于对象参数表现为类似引用传递的行为。** 在值传递...

    Java基础思考之数据传递Java系列2021.pdf

    public class CallByValue { private static User user = null; private static User stu = null; public static void swap(User x, User y) { User temp = x; x = y; y = temp; } public static void ...

    第8章 指针-2指针变量作函数参数1

    在C语言中,函数参数传递默认是按值传递(Call by Value),这意味着函数内部对形参的任何修改不会影响到实参。如果想要在函数中改变实参的值,就需要使用指针参数,这样函数可以通过指针访问并修改实参的内存位置。...

    java参数的传递与返回值

    参数的传递方式主要有两种:值传递(Pass-by-value)和引用传递(Pass-by-reference)。Java主要采用值传递的方式。 ##### 1. 值传递 当我们将基本数据类型作为参数传递给方法时,实际上是传递了该数据的值的一个...

    浅谈Java中方法的参数传值.pdf

    基本数据类型在方法传递时采用“按值传递”(call by value)的方式,即传递的是变量的副本值,原变量的值不会被改变。例如,在一个方法中,对传入的int型变量进行操作,原变量的值保持不变。 引用数据类型的参数...

    Java方法参数传递如何实现

    在程序设计语言中,方法参数传递有两种方式:按值调用(call by value)和按引用调用(call by reference)。按值调用是指方法接收的是调用者提供的值,而按引用调用是指方法接收的是调用者提供的变量地址。Java采用...

    C C++之指标 (pointer)参考 (reference) 观念整理与常见问题

    3. call by value, call by address (或 call by pointer), call by reference? - call by value:函数接收的是实参的副本,对副本的修改不会影响到原始变量。 - call by address 或 call by pointer:函数接收的是...

    本人在加州大学的c++教材,易懂好学

    在C++中,函数调用有两种主要方式,即值传递(Call by Value)和引用传递(Call by Reference)。值传递时,函数接收的是参数值的副本,对参数的修改不会影响到原变量。而引用传递则不同,函数接收的是变量的引用,...

Global site tag (gtag.js) - Google Analytics