精华内容
下载资源
问答
  • http://464772913.iteye.com/blog/1483163在谈java值传递引用传递之前必须搞清楚"形式参数""实际参数"两个概念在一个方法中,比如method1(Object o)中,O就是形参,形参就是形式参数,当你调用这个方法时,要传入一个...

    http://464772913.iteye.com/blog/1483163在谈java值传递与引用传递之前必须搞清楚"形式参数"和"实际参数"两个概念

    在一个方法中,比如method1(Object o)中,O就是形参,形参就是形式参数,当你调用这个方法时,要传入一个值,这个值叫做实际参数,也叫实参,形参你可以理解成一个占位符(为传入实参占一个位置).

    值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。

    引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。

    下面举例说明:

    传值---传递基本数据类型参数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的操作。

    更多文章:

    展开全文
  • (1)在Java里面,当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响,就是值传递。 (2)在Java里面,当调用方法时,如果传入的数值为引用数据类型(String类型除外...

    (1)在Java里面,当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响,就是值传递。

    (2)在Java里面,当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响,就是引用传递。

    展开全文
  • 值传递和引用传递python的值传递不会改变传入参数的值,而引用传递传入的是一个地址,有点类似c的指针,在执行完成之后会改变传入地址所指的值。值传递类型如下:上面的代码只是将a的值作为参数传递进去,程序执行完...

    值传递和引用传递

    python的值传递不会改变传入参数的值,而引用传递传入的是一个地址,有点类似c的指针,在执行完成之后会改变传入地址所指的值。

    值传递类型如下:

    上面的代码只是将a的值作为参数传递进去,程序执行完之后a的值并未改变

    a = 1

    def change_integer(a):

    a = a + 1

    return a

    print change_integer(a)

    print a

    结果:

    2

    1

    [Finished in 0.1s]

    引用传递的类型如下:

    b = [1, 2, 3]

    def change_list(b):

    b[0]= b[0]+1

    return b

    print change_list(b)

    print b

    结果:

    [2, 2, 3]

    [2, 2, 3]

    [Finished in 0.1s]

    而这里将b的地址传递进去之后,程序执行完之后b的值也随之改变。

    如何解决 变量 : 由 引用传递 变为 值传递??

    方案如下:

    import copy

    b = [1, 2, 3]

    def change_list(b):

    b[0]= b[0]+1

    return b

    print change_list(copy.deepcopy(b))

    print b

    结果:

    [2, 2, 3]

    [1, 2, 3]

    [Finished in 0.1s]

    展开全文
  • 讨论值传递和引用传递时,其实就是看值类型变量引用类型变量作为函数参数时,修改形参是否会影响到实参 在Go语言中五个引用类型变量,其他都是值类型 slice map channel interface func() 引用类型作为参数时,称为...

    一、概述

    • 讨论值传递和引用传递时,其实就是看值类型变量和引用类型变量作为函数参数时,修改形参是否会影响到实参
    • 在Go语言中五个引用类型变量,其他都是值类型
      • slice
      • map
      • channel
      • interface
      • func()
    • 引用类型作为参数时,称为浅拷贝,形参改变,实参数跟随变化.因为传递的是地址,形参和实参都指向同一块地址
    • 值类型作为参数时,称为深拷贝,形参改变,实参不变,因为传递的是值的副本,形参会新开辟一块空间,与实参指向不同
    • 如果希望值类型数据在修改形参时实参跟随变化,可以把参数设置为指针类型

    二、代码演示

    值类型作为参数代码演示

    package main
    
    import "fmt"
    
    func demo(i int, s string) {
    	i = 5
    	s = "改变"
    }
    
    func main() {
    	i := 1
    	s := "原值"
    	demo(i, s)
    	fmt.Println(i, s) //输出:1 原值
    }
    

    引用传递代码示例

    package main
    
    import "fmt"
    
    func demo(arg []int) {
       arg[len(arg)-1] = 110
    }
    
    func main() {
       s := []int{1, 2, 3}
       demo(s)
       fmt.Println(s) //输出:[1 2 110]
    }
    

    如果希望值类型实参跟随形参变化,可以把值类型指针作为参数

    package main
    
    import "fmt"
    
    //行参指针类型
    func demo(i *int, s string) {
       //需要在变量前面带有*表示指针变量
       *i = 5
       s = "改变"
    }
    
    func main() {
       i := 1
       s := "原值"
       //注意此处第一个参数是i的地址,前面&
       //s保留为值类型
       demo(&i, s)
       fmt.Println(i, s) //输出:5 原值
    }
    
    展开全文
  • 一、值传递 实参传递给形参的是值,形参实参在内存上是两个独立的变量,修改形参的值不会对实参有任何影响。
  • 其实,引用传递一开始是针对C的引用类型而言的,引用传递以外,有值传递和地址传递两种(即传值传址),因为引用传递和地址传递都能达到改变形参外的实参的效果,所以,慢慢的地址传递也开始被很多人叫为引用传递...
  • 在java中为什么很多人说有值传递和引用传递引用传递的本质是什么? 一:搞清楚 基本类型 引用类型的不同之处 int num = 10; String str = “hello”; 如图所示,num是基本类型,值就直接保存在变量中。而str是...
  • 当一个变量最为一个参数传入方法内部的时候,会有两种不同的传递方式:值传递和引用传递值传递的特点:不管方法内部对传进去的参数作任何改变,也不会影响方法外部的变量的值引用传递的特点:方法内部对传进去的...
  • // 这是值传递,把 $a 的值拷贝给了 $b,在内存中 $a $b 不在一个地址中,更改任意变量的值对对方无影响$b = 7;echo $a; //输出:6function foo($b){echo ++$b;}foo($b); // 输出:8echo $b;...
  • 对于不可变类型传递(不会影响原数据)不可变类型对于可变类型传递引用(会影响原数据)不可变类型传递引用python3不可变类型Number(数字)String(字符串)Tuple (元组)python3可变类型List(列表)Dictionary (字典)Sets...
  • 值传递:在函数范围内,改变变量值得大小,都不会影响到函数外边的变量值。引用传递:在函数范围内,对值的任何改变,在函数外部也有所体现,因为传引用传的是内存地址。敲两段代码然后就可以看出两者的区别,咱们...
  • 引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的是引用的地址,也就是变量所对应的内存空间的地址。传递的是的引用,也就是说传递前传递后都指向同一个引用(也就是同一个内存空间)。 ...
  • 值传递:指的是在方法调用时,传递的参数是按值的拷贝传递,传递的是值的拷贝,也就是说传递后就互不相关了。 引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应...
  • Lua赋值:值传递引用传递结论示例 结论 table类型赋值为引用传递,其它类型赋值为值传递 示例 local a = {1,2,3} local b = a print("************a[1]:"..a[1]) b[1] = 2 print("************set b[1] = 2") ...
  • (刚刚稍微接触Java的小白,可能有一些错误,感谢各位大佬指正) 值传递值传递很好理解,就是类似于把自己的值复制传给形参,而传入的参数存放在栈中,随方法的结束而消失,不会影响到main方法中的实参。 引用...
  • 首先,不要纠结于 Pass By Value Pass By Reference 的字面上的意义,否则很容易陷入所谓的“一切传引用其实本质上是传值”这种并不能解决问题无意义论战中。更何况,要想知道Java到底是传值还是传引用,起码你要...
  • 值传递和引用传递 基本类型进行值传递:在实参中复制了一份形参,形参里面发生改变,实参不会改变 引用数据类型:进行引用类型传递,把实参引用的地址复制给形参,形参引用的内存地址的值发生了改变,则实参引用的...
  • C++:值传递和引用传递

    2021-03-14 11:15:08
    值传递和引用传递 引用:变量数据类型 语法:&引用名 = 已声明的变量名 用引用作为函数参数的实现引用传递 函数参数传递: 值传递(单向值拷贝,只能将实参的值拷贝给形参, 实参与形参各自独占内存) 引用传递 :实现的...
  • Java中的值传递和引用传递区别,可能很多新手朋友还不知道,接下来爱站技术小编将详细介绍下,感兴趣的你可以参考下,希望本文所提供知识点可以帮助到你。传值---传递基本数据类型参数public class PassValue{...
  • 值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者...
  • 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对 参数 进行修改,将不会影响到实际参数。传递对象往往为整型浮点型字符型等基本数据结构。public class PassByValue...
  • 类型:包含:字符串、元组、数值,本身不允许被修改引用类型:包含:列表、字典,... = 3修改引用类型的,因为listb的地址lista的一致,所以也会被修改一般只为了复制,可以使用分片操作listb = lista[:]...
  • C++传参时值传递引用传递的区别内置类型值传递引用传递的区别值传递引用传递类对象值传递引用传递的区别值传递引用传递 在定义函数时,函数括号中的变量称为形式参数,简称形参;而在调用一个函数时括号中...
  • 在java中值传递和引用传递的最大区别在于有没有复制副本出来,如果有复制副本,那就是值传递,如果没有复制副本就是引用传递。 其实在java中只有值传递,所谓的引用传递,只是值传递的一种特例-共享对象传递,这种...
  • public class Test3 {public static void change(int a){a=50;}public static void main(String[] args) {int a=10;System.out.println(a);change(a);System.out.println(a);...main方法中将a传递给change方法,chan...
  • 先来看两个个来自于 《JavaScript 高级程序设计》P70-P71 的两个例子。 1.1. 基本类型参数传递 function addTen(num) { num += 10; return num; } var count = 20;...所以传递给 addTen 函数的是 20 这个
  • 现在想想也许是我听错了,他应该说的是:”go没有引用传递,都是值传递“。我们今天就来聊一下这个话题。 一个简单的例子 funcmodifySlice(slice[]int){ slice[0] = 11}funcmain(){mySlice:=[]int{1,2,3} m...
  • 不幸的是,我们根本不处理任何对象,而是处理称为引用的 对象句柄(当然是通过值传递)。选择的术语语义很容易使许多初学者感到困惑。它是这样的:public static void main(String[] args) {Dog aDog = new Dog("Max...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 674,006
精华内容 269,602
关键字:

值传递和引用传递区别