AIOps 一场颠覆传统运维的盛筵
700
2022-10-31
浅谈对Java中传参问题的理解
一、传值
java中的传值即传递的是原变量的一个副本。基本的数据类型,如:char,int,double等类型的变量向函数传递的参数,都是变量的副本都属于传值。函数内部不论进行任何操作,都不影响变量本身,影响的只是变量的副本。
二、传引用
从表面上来看,java中的对象类型都是传递的引用,而不是传递的值。然而,java中对象作为实参,传递的实际上还是值,即java中的传参传递的都是值!为什么会这么说?龚老师认为可以从jvm的构成的角度来解释一下自己对这个问题的理解。接下来我们先看一下JVM的结构:
三、JVM的结构及相应的解释
之所以说java中传递的都是值,是因为传递得是内存地址中的数,当然,这个值对于基本类型和对象类型来说意义是不一样的,对于基本类型这个数就是其值本身,传递值的结果就是,改变新的变量的值不影响旧的变量的值;而对于对象来说这个数是它的地址,传递这个值就相当于传递了真实对象的引用,传递了引用或者说是地址的结果就是变化会全局可见。所以说java中的方法都是按值调用的!只不过基本类型和对象类型的"值"的在具体的机制上作用不同。
综上,java中不论是基本类型还是对象,方法调用时,传递的都是值!
1.对于基本类型的变量,相当于操作其副本。
2.对于对象,相当于复制了一个引用,该引用指向的还是原变量的内存区域。
发表评论
暂时没有评论,来抢沙发吧~