精华内容
下载资源
问答
  • 话不多说,直接上代码 一、代码 @org.junit.Test public void test7(){ int a= 3; add(a); System.out.println(a); List list = new ArrayList();... 而对象在java中是存在堆内存中的,所以会被改变

    话不多说,直接上代码

    一、代码

        @org.junit.Test
        public  void test7(){
            int a= 3;
            add(a);
            System.out.println(a);
            List<String> list = new ArrayList<>();
            list.add("c");
            addList(list);
            System.out.println(list.size());
        }
    
        private void addList(List<String> list) {
            list.add("d");
        }
    
        private void add(int a) {
            a= a +4;
        }

    二、结果

    三、原因

    因为int是基本数据类型,基本数据类型在java内存中是存在栈内存中的,一旦方法执行完后,会自动出栈,变量都会释放,空间消失。
    而对象在java中是存在堆内存中的,所以值会被改变。

    展开全文
  • 一开始听到一个说法,Java没有引用传递,但是一直没有太多的思考在上面,直到前不久玩数组的时候,突然间发现把数组引用变量作为参数传递到一个方法当中进行操作之后,再去访问原数组,尽然改变了。于是乎,就想到了...

    简述

    调用方法的时候,有需要传参数的情况。在Java中,参数的类型有基本类型和引用类型两种。

    一开始听到一个说法,Java没有引用传递,但是一直没有太多的思考在上面,直到前不久玩数组的时候,突然间发现把数组引用变量作为参数传递到一个方法当中进行操作之后,再去访问原数组,尽然改变了。于是乎,就想到了之前在C++里面学过的引用传递,突然有一种错愕的感觉,就查了一些资料,探究当Java引用类型变量作为参数传递给方法的时候,到底是值传递还是引用传递。

    结论:如果将Java引用类型变量作为参数传递给方法,是将引用变量的值传递给形参,而引用变量的值实际上就是引用对象在堆内存中的地址。也就是说,这个时候实参和形参指向了同一个对象,如果利用形参进行操作,操作的就是实参指向的对象,最后通过实参的那个引用访问,自然是被形参操作过的结果。

    基本类型参数

    基本类型参数是典型的值传递,著名的案例就是更换两个数的值。下面是这个问题的示例代码:

    public class Main {

    public static void main(String[] args) {

    int num1 = 11;

    int num2 = 22;

    System.out.println("Before the call: num1 is " + num1 + " and num2 is " + num2);

    swap(num1, num2);

    System.out.println("After the call: num1 is " + num1 + " and num2 is " + num2);

    }

    public static void swap(int num1, int num2) {

    System.out.println("num1 is " + num1 + " and num2 is " + num2 + " in method of swap.(before)");

    int tmp = num1;

    num1 = num2;

    num2 = tmp;

    System.out.println("num1 is " + num1 + " and num2 is " + num2 + " in method of swap.(after)");

    }

    }

    运行结果如下

    Before the call: num1 is 11 and num2 is 22

    num1 is 11 and num2 is 22 in method of swap.(before)

    num1 is 22 and num2 is 11 in method of swap.(after)

    After the call: num1 is 11 and num2 is 22

    通过运行结果,可以清楚地知道,通过这样的参数传递,交换的仅仅是形参的值,而main方法当中的两个数的值并内有发生变化。这就是值传递的结果。

    引用类型参数

    通过一个数组引用演示引用类型参数的传递效果

    public class ArrayTest {

    public static void main(String[] args) {

    int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

    System.out.print("Before calling the inversion: ");

    for (int i : arr) {

    System.out.printf("%3d", i);

    }

    System.out.println();

    inversion(arr);

    System.out.print(" After calling the inversion: ");

    for (int i : arr) {

    System.out.printf("%3d", i);

    }

    System.out.println();

    setNull(arr);

    System.out.println("@" + arr);

    }

    public static void inversion(int[] arr) {

    int length = arr.length;

    for (int i = 0; i <= length / 2; i++) {

    int temp = arr[i];

    arr[i] = arr[length - i - 1];

    arr[length - i -1] = temp;

    }

    }

    public static void setNull(int[] array) {

    System.out.println("#" + array);

    array = null;

    System.out.println("$" + array);

    }

    }

    程序运行结果:

    Before calling the inversion:   0  1  2  3  4  5  6  7  8  9

    After calling the inversion:   9  8  7  6  4  5  3  2  1  0

    #[I@1d251891

    $null

    @[I@1d251891

    程序中,在main方法中定义了一个数组,并且在类中定义了一个将数组元素倒置的方法inversion(),这个方法需要传入一个数组类型的引用。在main方法中调用这个方法,并将arr这个数组的引用作为参数传递给inversion方法,通过程序执行的结果,可以看到当inversion方法执行完毕,main方法中的arr数组的内容的确发生了倒置。

    那么,这个时候是否就可以认为,引用类型的传递是引用传递而并非值传递呢?按照资料显示的,引用类型的参数传递传递的是引用变量的值,有什么方法可以证明一下呢?setNull()方法提供了这样的证明。

    setNull方法的参数是数组的引用变量,程序中传入的是arr.进入方法,首先打印了array,然后将它置空再打印一次,然后在main方法中,打印arr的地址。程序运行的结果表示,array置空之前和arr指向的是同一区域,而后array=null却并没有影响到arr.

    所以,可以肯定,当一个引用类型的变量被作为参数传递到方法中的时候,仅仅是将变量值复制后传递过去,而本身没有发生改变去指向其他。

    c2c4485f4a50fe86c8b2b8c8409c7d34.png

    当array=null的时候,array指向堆区的引用失效了。

    以上的示例和分析都表明,Java中的确没有引用传递,当把一个引用类型的变量作为参数传递给方法的时候,也仅仅是将引用变量的值复制一份给了方法中的参数,自己始终指向原本的对象。

    以上所述是小编给大家介绍的Java引用类型的参数也是值传递详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    展开全文
  • 1. 函数的参数类型def hs (a1, a2, a3,\u2026): * * * *语句a1, a2, a3是函数的参数。函数的参数类型可以分为:必需的参数,默认参数,变量参数(可变长度参数),关键字参数,参数组合,共有5个类型。2. 必需的参数。事实上...

    1. 函数的参数类型def hs (a1, a2, a3,\u2026): * * * *语句a1, a2, a3是函数的参数。函数的参数类型可以分为:必需的参数,默认参数,变量参数(可变长度参数),关键字参数,参数组合,共有5个类型。2. 必需的参数。事实上,我们之前给的例子是必需的参数。下面的例子需要参数:在函数中我们可以看到,你好,str是一个参数,这是一个正式的参数。这个参数的类型取决于你的实际输入输入当你调用。参数类型,当我们调用这个函数你好,我们传递一个字符串\u201Chello, world\u201D,那么实际的类型参数是一个字符串,所以正式的类型参数str也是一个字符串,所以当我们调用这个函数你好,我们通过它进入'hello,世界\u201D,将执行print语句的函数,它将在屏幕上显示如图:值得注意的是,当我们定义的函数时,只有一个形状参数,所以我们通过在调用此函数在实际参数。

    如果输入的参数比形状参数,将会有一个错误,如图:如果实际参数比形状参数,将报告一个错误。真正的参数小于形状参数。第二注意的是,当输入时将产生一个错误报告实际参数数量小于形状参数数量!正式的参数有一个参数,当调用函数没有参数传递,如图:2。默认参数默认参数在函数定义时,参数值。\u2026\u2026打印(\u201C我的名字:\u201C名称)(省略缺省参数)默认参数示例省略了实际参数23日得到结果。从上面的例子可以看到,上面的函数使用了两个正式的参数,当调用函数输入的两个实际参数,我们可以试着忽略实际参数23,看看我们可以得到结果,请参见图片:(改变默认参数的值),我们可以发现我们忽略实际的参数后23日23我们仍然可以获得实际的参数。

    当我们调用这个函数时,如果默认的参数不是一个值作为实际参数,默认参数的值将被称为作为实际参数,所以我们会默认值;如果我们进入一个非默认参数值调用函数时,默认参数的值将改变在这个时间和成为所输入的值!如图:需要注意的是,当我们调用这个函数时,我们也可以进入'parameter name =价值\u201D的形式,如图:参数名称=值。这里的观点是:当有两个以上的默认参数和必需的参数调用函数参数时,你必须注意:答:当调用一个函数,实际参数形式的参数名称,如上图所示。b:一个参数有一个参数名称和其他参数没有参数名称。默认的参数必须是参数名c:如果默认参数在正式的参数是必需的参数,那么默认的参数在实际的参数调用函数时也应该在前面;

    (默认参数在正式的参数,且默认参数在实际参数是在后面)默认的参数在正式的参数是第一,和默认的参数在实际参数后,导致一个错误:3。可变参数(可变长度参数)我们用一个例子来说明变量参数:打印(年龄)我insom:打印(i)返回可变长度参数我们可以看到,我们已经定义了两个参数在正式的参数。为什么正确进入4参数在实际参数?这是变量参数的好处!在代码中,实际的参数名称传递给形式参数的年龄,和其他三个* som传递。可以说,som相当于一个无限的容器,可以容纳很多参数。4. 事实上,关键字参数关键字参数出现在默认参数!关键字参数在函数被调用时,实际参数传递进来的参数名称,和实际参数以这种方式被称为关键字参数传递。

    看一个例子:定义一个字典:\u2026print(学校:\u201D、学校\u201C\\ n,类:,banji,\u201C\\ n\u201D、\u201C学生信息:\u201D,其他)关键字参数示例1上面的例子我们可以看到,除了两个必需的参数'Tsinghua\u201D和'Sophomore\u201D,还有关键字参数\u201C* * dir\u201D当调用函数。让我们看看另一个例子:\u2026\u2026打印('就有:\u201C、学校\u201C\\ n\u201D、\u201CBanji:\u201D, Banji, ' \\ n ',\u2018Student_info:\u2019,其他)关键字参数示例2从上面的示例中,我们发现,当有一个不定长度参数*在正式的参数,使用* dir调用函数时只会发现结果是字典的键名,也没有价值!

    5. 结合参数组合参数是将前面提到的4参数引入函数作为正式的参数在同一时间。值得注意的是,订单必须在定义参数:强制参数,关键字参数,默认参数和可变长度参数。举个例子:\u2026print (a1 =, a1, a2 =, a2、a3 =, a3, a4a =, a4, cs)(可变长度参数)第一次函数被调用时,1和2分别给a1, a2, a3正式参数= 10,但实际参数传入是3,改变初始值,所以a3 = 3 * a4无限期长度参数,4,5,6,7 * a4,所以a4a多个值,输出一个元组的形式,* * cs是一个关键字参数,所以的值m、n和* * xx是给* * cs,输出作为一个字典。第二次调用函数时,你是一个元组,和*涂方法调用时使用,所以a1 = 1 = 2 a2、a3 = 3, a4a = (4、5、6);

    展开全文
  • 1.对于基本类型参数,在方法体内对参数进行重新赋值,并不会改变原有的变量的。 2.对于引用类型参数,在方法体内对参数进行重新赋值引用,在方法体内使用的是引用的副本,不会改变原有变量的引用 3方法体内对参数...

    1.对于基本类型参数,在方法体内对参数进行重新赋值,并不会改变原有的变量的值。

    2.对于引用类型参数,在方法体内对参数进行重新赋值引用,在方法体内使用的是引用的副本,不会改变原有变量的引用

    3方法体内对参数进行运算不会影响原有的变量的值,但在方法体内对参数所指的对象的属性进行操作,将改变原有变量所指对象的属性值

    展开全文
  • 展开全部有耐心把我下面的看完了,你就明白了:JAVA 中的传636f707962616964757a686964616f31333236393136递都是传递吗?有没有引用传递呢?在回答这两个问题前,让我们首先来看一段代码:Java 代码public class ...
  • //数组值改变了,是引用传递(值会发生改变) String str="test and good"; str(str); System.out.println(str); //String值未改变,和基本数据类型参数传递一样,属于值传递(值不会发生改变) } public static void ...
  • 1.定义一个实体类,名为Student,参数有String name和Integer age,里面有toString方法,有参构造方法,set和get方法。 2.定义一个名为ServiceTest接口,里面有两个方法,doString()doStudent(),第一个方法返回值...
  • 可变类型可以改变:列表,字典不可变类型不可以改变:数字,字符串,元组问题1:在函数内部,针对参数使用赋值语句,会不会影响调用函数时传递的参数?---不会注意:无论传递的参数是可变的还是不可变的,只要针对...
  • 传递普通的参数2.传递对象3.传递List4.传递数组1.1 前端页面前端页面.png1.2 HTML代码注意:需要引入layui噢button{margin-top: 50px;margin-left: 20px;}Ajax 传递数值 实践传递简单的参数传递对象传递集合传递数组...
  • 进入页面,打印参数类型: 刷新页面,打印参数类型: 后来发现,原因是: vue-router 传参,不管是 params 形式还是query形式传参,在页面刷新后,params 和 query 对象中的属性所对应的属性都会被浏览器自身...
  • java类类型参数

    2021-02-12 12:49:53
    上节说明了类类型变量和基本变量的赋值方式的不同,这次就谈谈类类型参数和基本类型参数之间的差别。首先要明白什么是类类型参数。...下面给段代码加以说明:/***Comments:方法对类类型参数值及基...
  • 一直认为java 中String类型不能修改,主要是因为String是final的,而且里面没有设置的set方法。但是可以通过反射机制改变值。例1public class Test {public static void main(String[] args) throws Exception...
  • 前言当前主要存在两种传递...引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数进行的修改,将影响到实际参数或许存在这种误解,认为普通值类型就是传递,引用类...
  • Java改变引用数据类型在Java中,引用数据类型的数据传递的是(地址)的拷贝对于以下代码class BirthDate {private int day;private int month;private int year;public BirthDate(int d, int m, int y) {day = d...
  • 方法参数是基本类型时,传递的是。方法参数是引用类型时,传递的是内存地址参数是基本类型时,在调用方法时将传递到方法中,运行方法,运行结束方法退出,对原本main中定义的变量没有任何操作(方法中没有...
  • Python缺省值参数之坑

    2020-12-30 04:44:19
    当时我正在编写一个函数,函数的过程的参数是一个带缺省的列表对象,该函数需要对列表进行修改,最终函数的返回值是这个修改后的列表。整个函数可以抽象成下面这样简单的函数:修改列表函数可以看到append_lst( )...
  • 方法与参数类型

    2021-08-14 13:41:48
    语法:访问修饰符 返回值类型 方法名(形式参数列表){ 方法体; return 表达式; } 有参数有返回值方法的调用: 语法:数据类型 变量名 = 方法名(实际参数列表); 方法的返回值也称为方法,通过被调方法中的...
  • 一般来说,通过反射是很难获得参数名的,只能取到参数类型,因为在编译时,参数名有可能是会改变的,需要在编译时加入参数才不会改变。使用注解是可以实现取类型名(或者叫注解名)的,但是要写注解,并不方便。观察...
  • java值类型和引用类型

    2021-03-11 10:51:08
    [定义]引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的,那么调用这个方法是传入的变量的也将改变.值类型表示复制一个当前变量传给方法,当你在这个...
  • 1.前言Python中函数的参数类型比较丰富,比如我们经常见到*args和**kwargs作为参数。初学者遇到这个多少都有点懵逼,今天我们来把Python中的函数参数进行分析和总结。2.Python 中的函数参数在Python中定义函数参数有...
  • Swift的统一的功能语法足够灵活来表达任何东西,无论是甚至没有参数名称的简单的C风格的函数表达式,还是需要为每个本地参数和外部参数设置复杂名称的Objective-C语言风格的函数。参数提供默认值,以简化函数调用,...
  • Python函数里的默认参数和关键字参数有什么区别我像是一个你可有可无的影子,让寂寞交换着悲伤的心事,对爱无计可施,这无味的日子,眼泪,是唯一的奢侈。python函数,仅限关键字参数,但是调用时好像用了你理解错了...
  • import java.util.Random; public class Test2 { public static void main(String[] args) { int[] arr={10,20,30}; System.out.println("change前:"+arr[1]); change(arr);... System.out.println("change后:"+...
  • 今天看到一张帖子,楼主问Java如何在方法中修改传入参数。之前也经常被这个问题困扰,C++可以用指针或引用来实现,但是Java怎么办?先来举个例子吧,比如int i = 5,你把i做参数。java复制一个它的过去,所以在...
  • 基本类型和引用类型 基本类型存放在局部变量表中,无论如何修改只会修改当前栈帧的,方法执行结束对方法外不会做任何改变;此时需要改变外层的变量,必须返回主动赋值。 引用数据类型:指针存放在局部变量表中...
  • 问:当一个对象被当做参数传递到一个方法后,此方法可改变这个对象的属性,并返回变化后的结果,那么这里到底是传递还是引用传递?答:是传递。在java语言中只有传递参数;当一个对象实例作为一个参数被传递到...
  • 想写一个交换的方法 public static void swap(double a,double b){ double temp; temp=b; b=a; a=temp;...但是查阅了资料,这个方法执行后,只会改变方法体里的变量。方法体之外的变量还是原来的样子。
  • 是一个服务器端分页的方法,本身是返回List集合的,但是还需要返回总记录数和总页面,没办法返回,想到Java内方法的传值传引用类型,在网上找了Java传递参数分为2种:类型,Java里面也叫简单类型,这种参数类型的...
  • 可变对象:List, Set, Dict 是可以改变内部的元素 实例1(str类型): def changestr (str): str = "inside" print "这是function中 , 为:",str mystr = "outside" changestr(mystr) print "这是函数外边 , ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 977,796
精华内容 391,118
关键字:

参数的值是否改变与参数的类型有关