精华内容
下载资源
问答
  • 值传递的特点:不管方法内部对传进去的参数作任何改变,也不会影响方法外部的变量的值引用传递的特点:方法内部对传进去的参数作的改变也会影响方法外部的变量的值那么哪些是值传递,哪些是引用传递呢?1、基本类型...

    当一个变量最为一个参数传入方法内部的时候,会有两种不同的传递方式:值传递和引用传递。

    值传递的特点:不管方法内部对传进去的参数作任何改变,也不会影响方法外部的变量的值

    引用传递的特点:方法内部对传进去的参数作的改变也会影响方法外部的变量的值

    那么哪些是值传递,哪些是引用传递呢?

    1、基本类型(8种)的传递都是值传递

    2、引用类型(除String外)都是引用传递

    3、Strng比较特殊,它虽然是引用类型,但是却是值传递

    通过一下例子来理解:

    Student.java

    package com.tianjf;

    public class Student {

    private String name;

    public Student(String name) {

    super();

    this.name = name;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    @Override

    public String toString() {

    return name;

    }

    }

    Test.java

    package com.tianjf;

    public class Test {

    private static void changeInt(int i) {

    i = 1;

    }

    private static void changeStudent(Student student) {

    student.setName("李四");

    }

    private static void changeString(String str) {

    str = "456";

    }

    public static void main(String[] args) {

    int i = 0;

    String str = "123";

    Student student = new Student("张三");

    System.out.println("Before change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);

    changeInt(i);

    changeStudent(student);

    changeString(str);

    System.out.println("After change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);

    }

    }

    运行结果:

    Before change:

    i:0

    student:张三

    str:123

    After change:

    i:0

    student:李四

    str:123

    从运行结果可以看出,int和String类型的值经过change方法后没有变,而student的值变了。

    展开全文
  • 一、值类型与引用类型1.堆栈中存放:值类型默认存放在栈中,但当值类型是在引用类型中声明时候,则存放...二、值传递与引用传递1.值传递值传递是将变量一个副本传递到方法中,方法中如何操作该变量副本,都不...

    一、值类型与引用类型

    1.堆栈中的存放:

    值类型默认存放在栈中,但当值类型是在引用类型中声明的时候,则存放在其所在的引用类型的堆中。

    引用类型存放在堆中。其在堆中的内存地址存放在栈中。

    0818b9ca8b590ca3270a3433284dd417.png

    2.参数传递方式

    值类型参数可以值传递,也可通过ref、out关键字修饰,进行引用传递。

    引用类型参数只能以引用传递方式传递。

    二、值传递与引用传递

    1.值传递

    值传递是将变量的一个副本传递到方法中,方法中如何操作该变量副本,都不会改变原变量的值。

    0818b9ca8b590ca3270a3433284dd417.png

    在下面的例子中。将变量 a 以值传递方式传给方法 Test(),在Test执行a++操作时,实际是对a的副本进行操作,Main方法中打印a的值,结果仍为 a=1 。

    0818b9ca8b590ca3270a3433284dd417.png

    1 class Program

    2 {

    3 public static void Main(string[] args)

    4 {

    5 int a = 1;

    6 Test(a);

    7 Console.WriteLine(a);

    8

    9 Console.Write("Press any key to continue . . . ");

    10 Console.ReadKey(true);

    11 }

    12

    13 //值传递

    14 static void Test(int a)

    15 {

    16 a++;

    17 }

    18 }

    结果:1

    0818b9ca8b590ca3270a3433284dd417.png

    2.引用传递

    引用传递是将变量的内存地址传递给方法,方法操作变量时会找到保存在该地址的变量,对其进行操作。会对原变量造成影响。

    这里用“原变量”一词只是为了与值传递进行对比说明,实际上所有方法都是操作同一对象,不应有“原变量”一说。

    0818b9ca8b590ca3270a3433284dd417.png

    例子中,将Person对象p和变量 a (通过ref关键字修饰)以引用传递方式传给方法 Test()。在Test对变量进行操作时,是通过传递过来的地址010x,在堆中找到p,并对其进行操作。所以Main函数中再打印结果,已经发生变化。

    0818b9ca8b590ca3270a3433284dd417.png

    1 class Program

    2 {

    3 public static void Main(string[] args)

    4 {

    5 int a = 1;

    6 Person p=new Person{Age=20};

    7 //通过ref关键字,对值类型变量a进行引用传递

    8 Test(ref a,p);

    9 Console.WriteLine(a);

    10 Console.WriteLine(p.Age);

    11

    12 Console.Write("Press any key to continue . . . ");

    13 Console.ReadKey(true);

    14 }

    15

    16 //引用传递

    17 static void Test(ref int a,Person p)

    18 {

    19 a++;

    20 p.Age++;

    21 }

    22

    23 }

    24

    25 class Person

    26 {

    27 public int Age{get;set;}

    28 }

    结果:2

    21

    展开全文
  •  引用传递的特点:方法内部对传进去的参数作的改变也会影响方法外部的变量的值  那么哪些是值传递,哪些是引用传递呢?  1、基本类型(8种)的传递都是值传递  2、引用类型(除String外)都是引用传递 ...
  • 在Java中参数的传递主要有两种:值传递和参数传递;下面是对两种传递方式在内存上分析:一:值传递解释:实参传递给形参是值 形参和实参在内存上是两个独立变量 对形参做任何修改不会影响实参代码示例如下:...

    在Java中参数的传递主要有两种:值传递和参数传递;

    下面是对两种传递方式在内存上的分析:

    一:值传递

    解释:实参传递给形参的是值  形参和实参在内存上是两个独立的变量 对形参做任何修改不会影响实参

    代码示例如下:

    package arrayDemo;

    public class Demo1 {

    public static void main(String[] args) {

    int b =20;

    change(b);// 实参 实际上的参数

    System.out.println(b);

    }

    public static void change(int a){//形参 形式上的参数

    a=100;

    }

    }

    结果:20

    为什么?看下面分析:

    6c44717a95671bed08bca9b9d8b7afe8.png

    通俗的讲法就是:形参只是实参创建的一个副本,副本改变了,原本当然不可能跟着改变;

    再通俗的讲法就是:

    小明去餐厅吃饭,看见别人点的红烧肉挺好吃,九把服务员叫过来,说我要一份红烧肉,服务员从后厨拿来一份红烧肉,小明吃完了,但是他吃的红烧肉跟旁边那个人吃的是一份吗?当然不是。

    再来解释引用传递

    二:引用传递

    实参传递给形参的是参数对于 堆内存上的引用地址 实参和 形参在内存上指向 了同一块区域  对形参的修改会影响实参

    package arrayDemo;

    public class Demo1 {

    public static void main(String[] args) {

    int [] a={1,2,3};

    System.out.println(a[0]);

    change(a);

    System.out.println(a[0]);

    }

    public static void change(int[] a ){

    a[0]=100;

    }

    }

    结果:1        100

    为什么?

    eba16a61cd42bb80c4b6f3c4cf13451f.png

    由于引用传递,传递的是地址,方法改变的都是同一个地址中的值,

    原来a[0]指向0x13地址,值是1,

    后来在a[0] 指向的也是0x13地址,将值变成了100

    所以,再查询a[0]的值的时候,值自然变成了100

    通俗点的讲法就是:

    小明回到家,他妻子说:冰箱二层有一只鸡,你去做了;

    小明做好了,叫妻子过来吃饭。

    这个时候,他妻子现在看见的鸡和她买回来的一样吗?

    当然不一样,都做熟了;

    什么意思呢?

    鸡就是数据

    冰箱二层就是存储数据的地址

    把鸡做熟了就是相当于把值改变了

    地方还是那个地方,就是鸡变了。

    展开全文
  • 引用传递与指针传递

    2018-03-30 19:26:21
    1. 指针传递 指针传递本质上是值传递,它所传递的是一个地址值。 值传递的特点:被调函数对形式参数的任何操作都是作为局部变量进行的,不会影响主调函数的实参变量的值。... 引用传递的特点:被调函数对形参的...

    1.  指针传递

        指针传递本质上是值传递,它所传递的是一个地址值。

        值传递的特点:被调函数对形式参数的任何操作都是作为局部变量进行的,不会影响主调函数的实参变量的值。

    2. 引用传递

        引用传递中,局部变量栈空间中存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。

        引用传递的特点:被调函数对形参的任何操作都会影响主调函数中的实参变量。

    3. 总结

        指针是一个实体(替身);引用是一个别名(本体的另一个名字)

    展开全文
  • 引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的是引用的地址,也就是变量所对应的内存空间的地址。特点传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间...
  • 如果数据对象是一个比较大struct,则应该使用const指针或者const引用,来防止参数传递时发生结构体复制,导致程序效率下降; 如果数据对象时类对象,则使用const引用; 如果函数传参目的包括了修改传入...
  • C++语言中,函数的参数和返回值的传递...引用传递的特点是:被调函数对形参的任何操作都会影响主调函数中的实参变量。 举例说明: #include using namespace std; void swap3(int &p,int &q) { int temp; temp =
  • 引用传递,就是在方法调用中,传递的参数是按引用进行传递,传递的是引用的地址值,也就是变量所对应的内存空间地址。 2)特点: 参数在传递前和传递后,都指向同一个引用的地址值,因此只要一处修改该值,其他地方...
  • 一、理解 ... ☆ 引用传递的特点:方法内部对传进去的参数作的改变也会影响方法外部的变量的值 二、记忆 ★ 1、基本类型(8种)的传递都是值传递 ★ 2、引用类型(除String外)都是引用传递(传递
  • 1.首先,什么是按值传递和按引用传递?...按引用传递的特点: $a = 2; $b = &$a; //按引用传递 $a = 1; echo $b; //1 $b = 3; echo $a; //3 2.现证明PHP中对象不是按引用传递:
  • 值传递和引用传递

    2019-11-07 08:17:04
    (1):按值传递是什么?指的是在方法调用时,传递的参数是按值的拷贝传递。按值传递重要特点:...按引用传递的重要特点:传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。 ...
  • 指针传递和引用传递

    2021-04-21 18:03:41
    传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。 引用传递过程中,被调函数的形式参数也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调
  • 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递。示例如下: [java] view plaincopy public class TempTest { private void test1(int a){ ...按值传递重要特点传递的是值的拷贝,也就是
  • 传递的特点:方法得到的是所有参数值的一个拷贝,且方法不能修改传递给自己的任何参数变量的内容。 众所周知,C/C++是有值传递和引用传递的,而Java语言是否也是如此呢?看了许多的博客和技术文章,有的说Java...
  • 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递。...3:按引用传递的重要特点 传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。 说明 ...
  • 传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。(这里是在说实参指针本身的地址值不会变)如果理解不了大可跳过这段 引用传递: 形参相当于是实参的“别
  • 首先明确一个概念:值传递和引用传递,是指在方法中传递参数方式。 既然是在方法区别话,那么我们首先首先总结几个方法出来。 传递类型 参数数据类型为值类型和引用数据类型 特点 值传递 Sum...
  • 引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的是引用的地址,也就是变量所对应的内存空间的地址。特点传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间...
  • JAVA值传递和引用传递

    2018-03-14 18:20:43
    1:按值传递是什么指的是在方法调用时,传递的参数是按值的拷贝传递。...示例如下:3:按引用传递的重要特点传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。示例如下:...
  • 函数参数传递机制,传值和引用的是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种...值传递的特点是被调函数对形势参...
  • 传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。【就给你一个值,你自己做个副本就好】 引用传递(pass-by-reference)过程中,被调函数的形式参数虽...
  • 一、值传递 1、特点: (1)形参是实参拷贝,改变形参值并不会影响外部实参值。 (2)从被调用函数...(1)形参相当于是实参“别名”,对形参操作其实就是对实参操作,在引用传递过程中,被调函...
  • 严格上讲,Java中只存在值传递,但是有人认为Java中即存在值传递也存在引用传递。但是无论哪种说法,只是站角度不同,原理都是一样。下面一一解析:   1、值传递 1)含义: 值传递,就是在一个方法调用中,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,030
精华内容 412
关键字:

引用传递的特点