java按值传递?

原文链接:https://blog.csdn.net/scholar_man/article/details/80900212

在Java中,参数都是按值传递的。被传递到方法中的拷贝值,要不就是一个引用或一个变量,取决于原始参数的类型。从现在开始,下面的几条规则将帮助你理解方法中对于参数的修改怎么影响原始参数变量。

  1. 在方法中,修改一个基础类型的参数永远不会影响原始参数值。
  2. 在方法中,改变一个对象参数的引用永远不会影响到原始引用。然而,它会在堆中创建了一个全新的对象。(译者注:指的是包装类和immutable对象
  3. 在方法中,修改一个对象的属性会影响原始对象参数。
  4. 在方法中,修改集合和Maps会影响原始集合参数。

https://blog.csdn.net/yushanddddfenghailin/article/details/51386120

这一篇讲的明白点

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

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

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

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

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

原文地址:https://www.cnblogs.com/gaoyang666/p/11634492.html

时间: 2024-11-13 09:50:28

java按值传递?的相关文章

Java:按值传递还是按引用传递详细解说

前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,但是有个问题感觉还是很模糊,就是Java中到底是否只存在值传递,因为在查阅资料时,经常看到有人说Java只有值传递,但有人说既有值传递,也有引用传递,对于两个观点个人觉得应该是站的角度不同而得出两个不同的说法,其实两个说法其中的原理是一样的,只要咱们懂得其中的原理,那么至于叫什么也就无所谓了,下面是我在网上看到的一个帖子,解释的感觉挺全面,就转过来,以供以后学习参考: 1:按值传递是什么

Java按值传递、按引用传递

一般我们会说Java基本类型采用值传递,对象以及数组采用引用传递.但事实上这只是表面上的现象.实质上,Java都是按值传递引用.(Java中“引用”的概念相当于C++中的指针,可以不断改变值) 一,对象 对象与变量(实例)的区别: 对象保存在heap,而变量保存在stack:对象的入口地址是不可预知的,所以程序只能通过变量来访问对象,变量是对象的一个引用. 例1: class Word { String word; public Word(String word){ this.word = wo

java按值传递理解

Java没有引用传递只有按值传递,没有引用传递只有按值传递,值传递. 通过下面代码解释: 1 public class Test { 2 public static void main(String[] args ){ 3 int var = 1 ; 4 f() ; 5 System.out.println(var) ; 6 } 7 public static void f(int newVar ){ 8 newVar = 2 ; 9 } 10 } 执行结果: 1 分析: 当执行 int var

Java常见笔试题<四>

1.以下Json格式数据,错误的是: A.{company:4399} B.{"company":{"name":[4399,4399,4399]}} C.{[4399,4399,4399]} D.{"company":{[4399,4399,4399]} E.{"company":{"name":4399}} 参考答案:AC 分析:A:Json对象要求属性必须有双引号:C:Json必须有一组有序的键值对组

如何理解Java的值传递

结论 为了加深印象,先把结论放在文章开头. ++Java中只有值传递++. 形参与实参 在理解Java的值传递 实参Argument 实际参数,主调用函数传递给调用函数的参数 形参Parameter 形式参数,并非实际存在的变量,只在函数定义的函数内部使用.在调用函数时,实参将会给形参赋值,从而实现主调函数向调用函数传输数据的目的. 所谓的传递,就是实参给形参赋值的过程.这是我们理解值传递和引用传递的基础. 基本类型与引用类型 基本类型的变量保存值,即值就是变量自身. 而引用类型的变量的值表示对

老生常谈,传引用还是传值

问题 1.Java到底是按值传递(Call by Value),还是按引用传递(Call by Reference)? 2.如下面的代码,为什么不能进行交换? public CallBy swap2(CallBy a,CallBy b) { CallBy t = a; a = b; b = t; return b; } 3.如下面的代码,为什么能够交换成功? public int swap2(CallBy a,CallBy b) { int t = a.value; a.value = b.va

面试题: !=!=未看

重点知识 由于我面试的JAVA开发工程师,针对于JAVA,需要理解的重点内容有: JVM内存管理机制和垃圾回收机制(基本每次面试都会问,一定要搞得透彻) JVM内存调优(了解是怎么回事,一般做项目过程中使用较多) 设计模式(熟悉常见设计模式的应用场景,会画类图,实在不行背几个也是有用的) 多线程(每次都会问,包括线程和进程.线程状态.线程并发的操作等,需要深入复习) JAVA集合类框架(理解框架图.HashMap.ArrayList.HashSet等的关系和区别,其中HashMap的存储机制几乎

Java中只有按值传递,没有按引用传递!(两种参数情况下都是值传递)

今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“引用传递!”,并且还觉得自己对java的这一特性很是熟悉! 结果发现,我错了! 答案是: 值传递!Java中只有按值传递,没有按引用传递! 回家后我就迫不及待地查询了这个问题,觉得自己对java这么基础的问题都搞错实在太丢人! 综合网上的描述,我大概了解了是怎么回事,现在整理如下,如有不对之处望大神提出! 先来看一个作为程序员都熟悉的值传递

《编程导论(Java)·3.3.2 按值传递语义》

不要受<Java编程思想>的影响,计算机科学中的术语--按引用传递(pass-by-reference).不要搞成自说自话的个人用语. 这些术语也不是专门针对Java的,你不应该从某一本Java书上学习 不可以用于C.C++或Fortran语言的 特殊的"按引用传递". 验证按值传递很easy.在方法体中使用一个赋值语句,将形參作为左值. 按值传递时,对形參的赋值,不会影响实參.也就是说.那个赋值语句不会有不论什么副作用. 对于foo(A a),注意方法体中你要玩的是 a=