本人初初接触Java,对Java的对象调用方式存在不解,故作此篇。
众所周知,Java的参数传递都是以按值调用方式进行。
但是,如果按照C的思路来讲,既然Java的参数传递是按值调用,那在引用对象时,原对象状态不应该被修改,只能修改副本对象的状态。
所以,关于Java的参数调用,本菜鸟有两个猜想,不知道对不对,也不知道Java参数调用的实质是什么,所以还望各位大佬不吝赐教。
**
想法一:按值调用其实调用的是对象的地址(类似指针)
**
既然是按值调用,并且在调用对象时也可以同步修改原对象状态(按c语言按值调用的说法,在按值调用时,函数是对副本进行操作,而不是对原数据),所以我认为它这个所谓的“值”其实就是地址。相当于调用了源对象的地址(就是类似c的指针),然后相关方法就在源对象上对对象进行操作,从而达到修改对象状态的目的。
这么说,也就是说我们构造对象是返回的只是对象的地址,我们平常定义的对象变量其实也就相当于c中的指针变量,其作用其实就是用来存储返回的对象地址。只不过Java就把这一切封装了起来。
想法二:对副本操作通过某个机制同步修改原对象状态
如果我们撇开c指针的想法,按照定义变量的最本质的想法来看。
我们平常定义变量时就是开辟了一块内存。
int a=10;
就像这里,就是开辟了一块命名为a的内存块,里面存储的数据为10,而int类型只是指导内存开辟多大。
那么我们再定义对象变量时,我们就同理开辟了一块内存用于存储对象,而我们构造的对象返回是也是按值整个返回,然后存储在对象变量中。
在调用对象时,我们就同理把对象按值整个传递过去给副本,但是在Java中与c中不同,调用对象时,对象的原本与副本之间存在某种机制,这种机制使得方法在对副本对象进行操作时也能同步修改原本中对象的状态。那么这种副本与原本同步修改的机制是否存在呢?
因为知识浅薄,所以现在就对Java的对象调用感到迷惑。
它到底是按照地址调用,还是说某种副本原本的机制存在,还是说两个都不是?
正解是怎么样的呢??