首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java传递还是引用传递

开篇名义,首先就把结论表明--->Java传递还是引用传递起决于传递的参数基本数据类型(int,byte,long等)还是引用数据类型(String和类变量)。 废话不多说,上代码。 ? ?...代码很简单,图一中调用静态方法IntValues(int t),毫无疑问传递值,因为如果引用传递,那么二者打印的值一致的。很明显,a--之后,t的值没有发生改变。...图二也是一样,清晰明了,把方法参数的值赋值给a,然后改变a的值,二者值打印均一致,那是因为t代表的一个堆内存的地址,基本数据类型用=、+=、-=、等等符号代表把右边的值拷贝一份给左边,二者之间不会有联系...,引用数据类型则大大不同,打个比方,它们相当于传递了一把钥匙,大家都能打开同一扇门,即大家都是对同一个堆内存的数据进行操作,而第二次打印不同是因为a变量重新赋值的缘故,地址指向另一块堆内存。

1.3K10

String传递还是引用传递

String传递还是引用传递 今天上班时,同事发现了一个比较有意思的问题。他把一个String类型的参数传入方法,并在方法内改变了引用的值。...这里要向大家介绍一下,大家都知道java在传参时分为值 传递 和 引用传递 。参数为基本类型时传递, 参数为封装类型时引用传递。...上面的两个例子明显的值传递引用传递。但是如果参数String类型呢?...按照前面的例子,String应该是一个封装类型,它应该是引用传递可以改变值得, 运行的结果应该是”cd”。我们实际运行一下看看, str=ab,这如何解释呢?难道String基本类型?...1.基本类型的变量放在栈里; 2.封装类型中,对象放在堆里,对象的引用放在栈里。 java在方法传递参数时,将变量复制一份,然后传入方法体去执行。 这句话很难理解的,也是解释这个 问题的精髓。

96530
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java传递还是引用传递

    1.概述 曾经纠结了很久java的参数传递方式是什么样的,后面粗略的了解了一鳞半爪以后有了大概的印象:“传参数就是值传递,传对象就是引用传递”,后面进一步查找了相关资料和文章以后,发现这么理解不正确的...这里先放结论: java中参数的传递可以理解为都是值传递 基础数据类型传递值的拷贝 对象类型共享对象传递传递地址的拷贝 2.形参和实参 要理解参数的传递就必须先理解形参和实参: 形参:就是形式参数...3.1.值传递引用传递 理解了实参和形参,以及java对应的数据类型,我们就可以理解值传递引用传递了。...引用传递/址传递:方法调用时,实际参数的地址被传递给方法中相对应的形式参数,函数接收的原始值的内存地址。...; 共享对象传递:把你家仓库钥匙复刻了一把给别人; 共享对象传递的特点: 拷贝的地址与原地址指向同一个内存对象:别人用你复刻的钥匙一样能进出你的仓库 拷贝地址引用对象的改变不影响原地址的引用对象:老王在福建泉州也盖了个一模一样仓库

    8810

    Java 参数传递传递还是引用传递

    首先把结论表明,Java 的参数传递传递,因为有部分细节让人引起误解以为引用传递,故我们写两个例子来举例探讨。...System.out.print(b+"\n"); } } 控制台输出为 10 15 10 int 属于基本数据类型,我们都知道基本数据类型存储于栈,而它的地址就是值本身,这个例子中我们把 a 的值复制一份传递给...name小黑 地址为 demo.rzj.com.androiddemo.ExampleUnitTest$Student@1a93a7ca age 1000 name灭霸 相信大部分同学对于Java 传递最大的疑问就是为什么这个例子中的...Student 实例对象 a 传递到 change 方法中 age 、name 参数被改变了会影响到外面的对象,大家先看一下控制台的输出,当我们对形参 b = c 时,它的内存地址确实是改变了,但是并没有影响到外面的...a 对象的内存地址,这就充分说明了值传递,只不过值得一提的,这个值传递复制了一份对象,但是里面的参数所引用的地址指向一样的,重点理解的引用数据类型传递的确实是值,但是对象内部的参数指向的一样的数据

    2.8K20

    Java的参数传递传递还是引用传递

    当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底传递还是引用传递?    答:按值传递。Java 语言的参数传递只有按值传递。...当一个实例对象作为参数被传递到方法中时,参数的值就是该对象的引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法内改变,但对象的引用(不是引用的副本) 永远不会改变的。...Java的参数传递,不管基本数据类型还是引用类型的参数,都是按值传递,没有按引用传递!  ...所以,在changeNum()方法调用之后,num所指向的存储单元的值还是没有发生变化,这就是所谓的“按值传递”!按值传递的精髓传递存储单元中的内容,而不是存储单元的引用!...当执行到第5行代码时,person作为参数传递给change()方法,需要注意的:person将自己存储单元的内容传递给了change()方法的p变量!

    3.3K40

    Java 中“值传递”还是“引用传递”?

    Java 中到底“值传递”还是“引用传递”? ? 回答数很多,点赞数也很多。很快就吸引了我的注意力! 通过我个人对通篇文章的阅读,得出了 3 个普遍被大家误导的错误!...错误1:值传递引用传递,区分的条件传递的内容,如果个值,就是值传递。如果引用,就是引用传递。 错误2:Java 引用传递。...错误3:传递的参数如果普通类型,那就是值传递,如果对象,那就是引用传递。 实际上,Java 中只有“值传递”!这并不是我一家之言,而是众多 stackoverflow 上众多网友的讨论的结果!...您可以分配指针,将指针传递给方法,按照方法中的指针操作并更改指向的数据。但是,您无法更改指针指向的位置。 Java 总是按值而不是通过引用传递参数。...Java 把引用的地址当做值进行了传递,这么说,你应该就明白了! 上面我的解释,可能会遇到大家!时间关系,我推荐大家去阅读原文吧。

    77120

    Java 到底传递还是引用传递

    更何况,要想知道Java到底传值还是传引用,起码你要先知道传值和传引用的准确含义吧?可是如果你已经知道了这两个名字的准确含义,那么你自己就能判断Java到底传值还是传引用。...而str引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。...(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收) 三:调用方法时发生了什么?参数传递基本上就是赋值操作。...数组类型引用和对象: 当我们声明一个数组时,如int[] arr = new int[10],因为数组也是对象,arr实际上引用,stack上仅仅占用4字节空间,new int[10]会在heap中开辟一个数组对象...这个数组内部有两个引用(大小为4字节),分别指向两个长度为4的类型为int的数组。 ? 所以当我们传递一个数组引用给一个方法时,数组的元素可以被改变的,但是无法让数组引用指向新的数组

    53420

    解惑4:java传递还是引用传递

    一、概述 曾经纠结了很久java的参数传递方式是什么样的,后面粗略的了解了一鳞半爪以后有了大概的印象:“传参数就是值传递,传对象就是引用传递”,后面进一步查找了相关资料和文章以后,发现这么理解不正确的...这里先放结论: java中参数的传递可以理解为都是值传递 基础数据类型传递值的拷贝 对象类型共享对象传递传递地址的拷贝 二、形参和实参 要理解参数的传递就必须先理解形参和实参: 形参:就是形式参数...1.值传递引用传递 理解了实参和形参,以及java对应的数据类型,我们就可以理解值传递引用传递了。...引用传递/址传递:方法调用时,实际参数的地址被传递给方法中相对应的形式参数,函数接收的原始值的内存地址。...共享对象传递:把你家仓库钥匙复刻了一把给别人 2.共享对象传递的特点: 拷贝的地址与原地址指向同一个内存对象:别人用你复刻的钥匙一样能进出你的仓库 拷贝地址引用对象的改变不影响原地址的引用对象:老王在福建泉州也盖了个一模一样仓库

    64230

    Java到底引用传递还是值传递

    引用传递:作为参数传递传递参数本身,当被传递方法改变传递后的变量参数值,原参数也会发生改变。...(注意虽然java面向对象编程,但是基本类型变量不是对象(数组对象),为了解决这个问题有了封装类。)...首先,你需要了解下java变量的分类:java中的变量分为 基本类型 接口类型 类类型 数组类型 其中后面三种统称为引用类型,而基本类型分为三种, 数字类型 boolean returnAddress...array 被初始化 arr 的拷贝也就是一个对象的引用,也就是说 array 和 arr 指向的同一个数组对象。因此,外部对引用对象的改变会反映到所对应的对象上。...理由很简单,方法得到的对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。 很多程序设计语言(特别是,C++和 Pascal)提供了两种参数传递的方式:值调用和引用调用。

    80120

    c++:*与&, *&p, 指针传递引用传递数组形参

    (地址)取值运算符,这里引用操作符,可以理解成打开对应地址编号的盒子,取出里面的数据。(&a) 就是打开a对应的小盒子,取出里面的数据,即(&a)和a等价。...(&p) = p p指针,&p为p的地址 (取包有内容p的盒子的编号) 再进行解引用(拆开盒子),所以得到 *&p = p 指针传递 形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用...int b = 10; test(&b); cout << “b的值:” << b << “\n” << “b的地址:” << &b << “\n”; } 形参int *p ,实参为传入地址 引用传递...当要使用数组作为函数形参时,因为一个数组不能使用另外一个数组初始化,也不能将一个数组赋值给另外一个数组,而在“1.1 非引用形参”中提到要用实参的副本来初始化形参,所以实参为数组时,不能直接传递给形参...FindMax(int array[10]); 虽然不能直接传递数组,但是函数的形参可以写成数组的形式。

    33720

    Java的参数传递「按值传递」还是「按引用传递」?

    [在这里插入图片描述] 有很多面试者这样理解的: 如果传递类型为基础数据类型,则按值传递, 如果传递类型为类,则按引用传递。 这样的理解正确吗?...下面我们就来说说 Java中的参数传递到底按值传递还是按引用传递? 首先说下正确的答案:Java 的参数传递,不管基本数据类型还是引用类型的参数,都是按值传递,没有按引用传递!...按引用传递:将对实际参数的别名或引用传递给方法,将其称为按引用传递的原因。 你个糟老头子坏得狠,我信你个鬼,你这个解释给我要给差评..... 且听老夫(哦,不,小编)慢慢道来......当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底「按值传递」还是「按引用传递」? 答:按值传递。Java 语言的参数传递只有「按值传递」。...我希望上面的解释能消除所有疑问,只需要记住Java 的参数传递,不管基本数据类型还是引用类型的参数,都是按值传递,没有按引用传递!。

    2.6K30

    面试:Java 到底传递还是引用传递

    更何况,要想知道Java到底传值还是传引用,起码你要先知道传值和传引用的准确含义吧?可是如果你已经知道了这两个名字的准确含义,那么你自己就能判断Java到底传值还是传引用。...而str引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。...(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收) 三:调用方法时发生了什么? 参数传递基本上就是赋值操作。...数组类型引用和对象: 当我们声明一个数组时,如int[] arr = new int[10],因为数组也是对象,arr实际上引用,stack上仅仅占用4字节空间,new int[10]会在heap中开辟一个数组对象...这个数组内部有两个引用(大小为4字节),分别指向两个长度为4的类型为int的数组。 所以当我们传递一个数组引用给一个方法时,数组的元素可以被改变的,但是无法让数组引用指向新的数组

    28240

    【Java基础】 Java中传递还是引用传递

    传递引用传递最大的区别是传递的过程中有没有复制出一个副本来,如果传递副本,那就是值传递,否则就是引用传递。...Java对象的传递通过复制的方式把引用关系传递了,因为有复制的过程,所以是值传递,只不过对于Java对象的传递传递的内容对象的引用。...值传递引用传递最大的区别是传递的过程中有没有复制出一个副本来,如果传递副本,那就是值传递,否则就是引用传递。...在Java中,其实是通过值传递实现的参数传递,只不过对于Java对象的传递传递的内容对象的引用。我们可以总结说,Java中的求值策略共享对象传递,这是完全正确的。...但是,为了让大家都能理解你说的,我们说Java中只有值传递,只不过传递的内容对象的引用。这也是没毛病的。

    13110

    【Java】Java中传递还是引用传递的?

    对于Java的初学者来说值传递引用传递一个容易混淆的概念,很多时候调用方法传入参数运行方法后的结果与自己享的不一致。那么Java到底如何传参的呢?...简介 值传递: 在值传递中,函数接收到的参数的值的副本,而不是参数本身。 当你向函数传递一个参数时,函数会创建一个新的变量,并将传递给函数的值复制到这个新变量中。...值传递常见于基本数据类型(如整数、浮点数、布尔值等)的传递引用传递: 在引用传递中,函数接收到的参数的引用(地址)而不是参数的值的副本。...引用传递常见于复杂数据类型(如数组、对象、类实例等)的传递。 多数情况下,引用传递可以节省内存空间,并且可以避免复制大量数据。...结论 在Java中按照值传递的方式,只不过参数不同的类型可能会出现不同的结果。 希望我的解答能够为您提供帮助,喜欢的话希望给博主一个关注

    27010

    说说Java到底传递还是引用传递

    01、值传递 VS 引用传递 首先,我们必须要搞清楚,到底什么传递,什么引用传递,否则,讨论 Java 到底传递还是引用传递就显得毫无意义。...而当一个参数按照引用传递的方式在两个方法之间传递时,调用者和被调用者其实用的同一个变量,当该变量被修改时,双方都是可见的。...Java 程序员之所以容易搞混值传递引用传递,主要是因为 Java 有两种数据类型,一种基本类型,比如说 int,另外一种引用类型,比如说 String。...03、引用类型的参数传递 来看一段创建引用类型变量的代码: Writer writer = new Writer(18, "沉默王二"); writer 对象吗?还是对象的引用?...每当引用类型作为参数传递时,都会创建一个对象引用(实参)的副本(形参),该形参保存的地址和实参一样。

    45220

    【说站】php按值传递引用传递的比较

    php按值传递引用传递的比较 说明 1、按值传递php必须复制值。特别是对于大型字符串和对象来说,这将是一项昂贵的操作。 2、引用传递无需复制值,有利于性能提高。..."; $b = $a; $b = "newtest"; echo $a;  //输出test echo $b;   //输出newtest 引用传递 $a = 'test'; $b = &$a;  //...引用赋值,$a、$b指向同一空间,两者相对与一个共同体 $b = 'newtest';    //$b 变则 $a跟着变 echo $a;  //输出 newtest echo $b;  //输出  newtest...以上就是php按值传递引用传递的比较,希望对大家有所帮助。...更多php学习指路:php教程 推荐操作系统:windows7系统、PHP5.6、DELL G3电脑 收藏 | 0点赞 | 0打赏

    1.1K30

    PHP笔记:变量传值,值传递引用传递的区别

    变量传值在开发中经常会遇到,主要有两种方式:值传递引用传递,下面通过一个示例来说明两者的区别。 首先定义两个变量 $a 和 $b : $a = $b =10; #表示两个变量都等于10。...值传递:在一个变量发生改变后,另外一个变量不受影响。 示例: $c =  $a; 引用传递:在一个变量改变后,另一个变量也跟着改变。...示例: $d = &$b; 先输出一下变量 $c 和 $d : echo $c,$d; #结果 1010 下面把 $a 和 $b 的值修改一下: $a = 1; $b = 2; 再输出一下 $c 和 ...$d 结果:102 ,说明 $a 的改变没有影响到 $c , $b 的改变影响到了 $d 。...echo $c,$d; #结果 102 声明:本文由w3h5原创,转载请注明出处:《PHP笔记:变量传值,值传递引用传递的区别》 https://www.w3h5.com/post/323.html

    3.2K30

    Java的字符串传递还是引用传递

    Java的字符串传递还是引用传递 这是Java的经典问题。关于stackoverflow,已经提出了许多类似的问题,并且有很多不正确/不完整的答案。如果您考虑不多,问题很简单。...常见的令人困惑的问题 x存储指向堆中"ab"字符串的引用。因此,当x作为参数传递给change()方法时,它仍指向堆中的"ab",如下所示: 因为java传递值,所以x的值对"ab"的引用。...当方法change()被调用时,它将创建一个新的"cd"对象,并且x现在指向"cd",如下所示: 这似乎一个很合理的解释。他们很清楚Java总是按值传递。但是这里有什么问题? 3....Java仅按值传递。将x传递给change()方法时,将传递x值的副本(引用)。方法change()创建另一个对象"cd",并且它具有不同的引用变量x更改其引用(改为"cd"),而不是引用本身。...关键变量存储引用,但不是引用本身! 5.解决这个问题 如果真的需要更改对象的值。首先,对象应该是可变的,例如StringBuilder。

    92120
    领券