精华内容
下载资源
问答
  • 对象传递后值不变
    千次阅读
    2019-12-18 16:27:49
    let {...data} = this.listQuery;
    
    更多相关内容
  • 今天写代码遇到了一个很离谱的问题,A方法传递List进B在B方法里面修改了List的引用,但是A方法里面的List没做改变见下代码 public class Test{ public void A(){ List<String> list = Lists.newArrayList(...

    今天写代码遇到了一个很离谱的问题,A方法传递List进B在B方法里面修改了List的引用,但是A方法里面的List没做改变见下代码

    public class Test{
    	public void A(){
    		List<String> list = Lists.newArrayList("123","234");
    		System.out.println(list.size());
    	}
    
    	public void B(List<String> list){
    		list = new ArrayList<>();
    	}
    }
    
    输出结果:2
    

    原因

    首先我们要记得方法传递的是和实参内容相同的形参,我们在方法B里面确实改变了list的地址值,但是我们改变的是list的形参的地址值,方法B运行结束
    形参被回收实参不会有任何改变,可以理解成形参就是实参的一个不同栈地址的副本 见下图.可见形参的地址值改变对实参没影响

    在这里插入图片描述

    展开全文
  • c#中对象作为方法参数传递引用传递值传递这本是一个很简单的知识点,但是我们在实际开发过程中还是蛮容易踩到这个 坑,尤其是在维护他人代码。逻辑比较复杂的时候,容易出错,哈哈,警醒一下。 如图所示,对象...
     c#中对象作为方法参数传递引用传递,值传递这本是一个很简单的知识点,但是我们在实际开发过程中还是蛮容易踩到这个
     坑,尤其是在维护他人代码。逻辑比较复杂的时候,容易出错,哈哈,警醒一下。
    

    直接上图
    如图所示,对象为引用传递,方法中会改变实际的对象的值。
    引用传递相当于是对引用对象地址的传递,期间改变值,在方法出来之后,存在对应地址的值是会发生变化的。值传递,只是传值不会方法结束之后是不会改变值的。
    值传递变成引用传递,加上ref就行。string是引用类型,string按值传递的效果与值类型按值传递效果一样,string在这里比较特殊。
    引用传递不改变对象的值,其中一个方法是在方法中重新new一个对象,然后赋值,这样的话,就会在方法中重新开辟一个新的地址,来存放这些值,原先传入的参数不改变其地址上存入的值
    一句话总结,引用传递是传的是本身,值传递传的是个副本。

    展开全文
  • Java 传递和对象传递详解

    千次阅读 2016-05-12 17:46:04
    堆和栈:Java中基本数据类型的对象的引用保存在栈中,具体对象值保存在堆中。传递原理: 一个方法传递的参数如果是基本数据类型,则是对具体的拷贝;如果是对象数据类型,则是对对象引用地址的拷贝,而非...

    1、需要明白的概念:
    堆和栈:Java中基本数据类型的值和对象的引用保存在栈中,具体对象值保存在堆中。

    传递原理:
    一个方法传递的参数如果是基本数据类型,则是对具体值的拷贝;如果是对象数据类型,则是对对象引用地址值的拷贝,而非具体值拷贝。下面分析三种情况:

    ①一个方法不能改变传入基本类型的参数值。
    示例代码:

    public class Test2 {
    
        public static void main(String[] args) {
            int a = 1;
            System.out.println("--->>>before a:"+a);
            change(a);
            System.out.println("--->>>after a:"+a);
        }
    
    
        private static void change(int b){
            b = 2;
            System.out.println("--->>>current b:"+b);
        }
    
    }

    打印:

    --->>>before a:1
    --->>>current b:2
    --->>>after a:1

    图解:
    这里写图片描述
    说明:
    b=2单独开了一片空间,和a没有任何关系,所以改变b是不会对a的值有任何影响的。

    ②一个方法不能改变传入对象类型的参数的引用地址。
    示例代码:

    public class Test3 {
    
        public static void main(String[] args) {
            Person pa = new Person("张三");
            System.out.println("--->>>before pa:"+pa.getName());
            change(pa);
            System.out.println("--->>>after pa:"+pa.getName());
        }
    
    
        private static void change(Person pb){
            Person pc = new Person("李四");
            pb = pc;
            System.out.println("--->>>current pc:"+pc.getName());
            System.out.println("--->>>current pb:"+pb.getName());
        }
    
        public static class Person{
            private String name;
    
            public Person(String name){
                this.name = name;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
        }

    打印:

    --->>>before pa:张三
    --->>>current pc:李四
    --->>>current pb:李四
    --->>>after pa:张三

    图解:这里写图片描述

    说明:
    当开始调用change(pa)的时候,实际上是将pa的地址拷贝了一份然后给了pb,所以pa和pb都指向张三;
    pc是从新new的,会重新开辟栈区和堆区的空间;
    然后经过pb = pc的赋值操作后,实际上是让他们同时指向堆区的李四。

    ③一个方法能够改变传入对象类型的参数某一个属性。
    实例代码:

    public class Test4 {
    
        public static void main(String[] args) {
            Person pa = new Person("张三");
            System.out.println("--->>>before pa:"+pa.getName());
            change(pa);
            System.out.println("--->>>after pa:"+pa.getName());
        }
    
    
        private static void change(Person pb){
            pb.setName("李四");
            System.out.println("--->>>current pb:"+pb.getName());
        }
    
        public static class Person{
            private String name;
    
            public Person(String name){
                this.name = name;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
        }
    
    }

    打印:

    --->>>before pa:张三
    --->>>current pb:李四
    --->>>after pa:李四

    图解:
    这里写图片描述
    说明:
    调用change(pa)方法后,实际上是将pa的地址拷贝了一份然后给了pb,所以pa和pb都指向张三;
    调用pb.setName(“李四”)后,实际上是将张三变成了李四,pa和pb引用地址不变,所以pa和pb都指向了李四。

    总结:
    ①一个方法不能改变传入基本类型的参数值。

    ②一个方法不能改变传入对象类型的参数的引用地址。

    ③一个方法能够改变传入对象类型的参数某一个属性。

    展开全文
  • 问:当一个对象被当做参数传递到一个方法,此方法可改变这个对象的属性,并返回变化的结果,那么这里到底是值传递还是引用传递? 答:是值传递。在java语言中只有值传递参数;当一个对象实例作为一个参数被...
  • 已经了解是值传递,将对象拷贝一份传入方法,在改变了对象基础上 原有对象不变,但是为什么都改变了,但是对象的地址确实一模一样? 求大神解答 ``` public class Test1 { static class Student{ ...
  • Python值传递和引用传递(详细分析)

    千次阅读 多人点赞 2022-05-27 17:07:09
    4.2 不可变对象的参数传递 4.3 可变对象的参数传递 5.总结 6 不可变与可变对象赋值对比: 6.1 单层源对象 6.1.1 源对象是不可变数据类型(对象元素也不可变) 6.1.2 源对象是可变数据类型(对象元素也不可变的...
  • 一: 如何在两个类A和B中传递Value??  (1)方法一:    两个类中都有这个要传递的value成员变量。  均有getValue(),setValue() 函数。    从一个类中getValue(),然后将value通过另一个类的setValue...
  • Java到底是引用传递还是值传递

    千次阅读 多人点赞 2020-09-11 17:28:14
    } // 输出 年龄:19 看,对象里的属性被改变了,不是值传递吗,应该不会改变啊,这时候就有人总结了,当传的是基本类型时是值传递、当传的是引用类型时是引用传递。真的是这样吗? 分析这个问题,我们需要知道变量...
  • 前言在Java中,当对象作为参数传递时,究竟传递的是对象,还是对象的引用,这是一个饱受争议的话题。若传的是,那么函数接收的只是实参的一个副本,函数对形参的操作并不会对实参产生影响;若传的是引用,那么...
  • 学过其它语言如(C,C++),都知道参数传递值传递和引用传递,python的参数传递属于哪种? 一、值传递和引用传递 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟...
  • Java中没有指针,所以也没有引用传递了,仅仅有值传递不过可以通过对象的方式来实现引用传递 类似java没有多继承 但可以用多次implements接口实现多继承的功能 值传递:方法调用时,实际参数把它的值传递给对应的...
  • java中什么是值传递

    千次阅读 2022-03-10 17:50:50
    如下图代码,输出a和b的,以及张三李四会交换吗 我们直接给出结果: 结果一定是不会交换的 那么为什么他不会交换呢?我给大家画一下这段程序执行时堆栈的解析图 首先Main方法入栈,然后实例化a,b,...
  • 这里提一嘴,比如你渲染一个对象,然后点击一下,给这个对象动态添加属性,那么这个对象数据确实变化了,但是视图不会更新,不过数组不会有这个问题,对象就会有这个问题 原因和解决方法见这篇文章...
  • 今天看引用传递/值传递相关的东西,说到String的自初始化不能修改,我就想,如果调用函数改变了String类对象的引用,那主函数里头的输出结果会不会变化,结果发现不行...同样的,...今天看引用传递/值传递相关的...
  •   最近看到一道关于string的面试题,差点让我以为string是值传递,就是下面这个例子,体验下: 1 2 3 4 5 6 7 8 9 10 11 12 public class ...
  • 当一个对象被当做参数传递到一个方法,此方法可改变这个对象的属性,并可返回变化的结果,那么这里到底是值传递还是引用传递?? 答:是值传递,Java编程语言中只有值传递参数。当一个对象作为参数传递到方法中...
  • 文章目录代码示例Java中的“传值”和“传引用”问题关于String参数传递问题的曲解之一——直接赋值与对象赋值 代码示例 首先来个例子说明下本文研究的内容: public class StringTest { private String aa = "1111...
  • 地址用来标记person对象在堆内存中的位置,上面的方法就是传递person对象的地址 在changeAge(Person person)中根据传过来的地址,去堆中找到person的对象,改变age属性,方法执行完,main()再去堆里找person...
  • java中的参数传递-值传递、引用传递

    千次阅读 2017-04-12 16:38:05
    参数是按而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递。 在 Java 应用程序中永远不会... Java 应用程序是按值传递对象引用的。   Java 应用程序中的变量可以为以下两种类型之
  • 把用户每次输入的(businessBuyer)都存入一个空的数组(BusinessBuyer)内,累加,但发现每次用户输入,数组内每一个对象的元素全都跟改变了,所以数组内的所有对象的元素全都变成了用户最后一次输入的。...
  • 最近在写代码的时候出了一个错误,由于对引用理解的不深,将Integer传入方法中修改,以为传入直接修改Integer中的就不用写返回值接收了,虽然很快发现了问题,但还是来总结一下 首先是代码: public static ...
  • Java字符串的参数传递为何没改变原本的 例题 public class StringTest{ String str = new String("good"); char[] ch = {'t', 'e', 's', 't'}; public void change(String str, char ch[]){ str = "Hello"; ...
  • python变量的传递方式

    千次阅读 2020-06-29 22:57:14
    python变量的传递 在编程语言中,变量的传递方式有两种:值传递和引用传递 值传递,就是先定义一个变量a,再定义变量b 等于变量a,无论a的如何变化,变量b的还是被定义时的变量a的 引用传递,就是先...
  • 为什么大家都说Java中只有值传递

    千次阅读 多人点赞 2020-01-08 21:57:10
    最近跟Java中的值传递和引用传递杠上了,一度怀疑人生。查了很多资料,加上自己的理解,终于搞清楚了,什么是值传递和引用传递。也搞明白了,为什么大家都说Java只有值传递,没有引用传递。原来,我一直以来的认知都...
  • Python参数传递 - 引用传递&值传递

    万次阅读 2016-05-25 09:51:42
    Python值传递和引用传递区别,哪些类型值传递,哪些是引用传递值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数的改变不影响实际参数的。>>> a1 = 520 >>> a2 = a1 >>> print ...
  • Java 值对象探讨与实践

    千次阅读 2021-03-31 00:19:33
    类型与值对象我们都知道,Java 语言中的类型分为两种:基本类型(primitive type)和引用类型(reference type),这不仅是语言层面的特性,也由 JVM 内在实现...
  • Python就是把一些参数从一个函数传递到另一个函数,从而使其执行相应的任务。但是你有没有想过,参数传递的底层是如何工作的,原理又是怎样的呢?实际工作中,很多人会遇到这样的场景:写完了代码,一测试,发现结果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 128,426
精华内容 51,370
热门标签
关键字:

对象传递后值不变