现在这个it行业入行的技术门槛越来越高,自学甚至很难成功,所以我就和你一起坚持下去。我也是通过培训进入这个行业的。对比了很多机构,我选择了中公优聘。一是性价比比较高。然后公司比较大,感觉比较靠谱。对比了几家机构,感觉都差不多。毕竟我是个菜鸟。只要老师愿意耐心教我努力,我想重要。中公老师和学生一样住在基地里。记得老师有时候会陪我们上课到晚上十一二点,正常情况下会陪我们晚自习到九点时钟。
按值传递是指在调用函数时复制实际参数并传递给函数,这样如果在函数中修改了参数,实际参数不会受到影响。让让我们看看下面的图片,看看整个过程中发生了什么,为什么在java中只传递值。
稍微解释一下这张图。当我们在main中创建一个用户对象时,我们会在堆中创建一个内存,用于存储姓名和性别等数据。然后hollis保存内存的地址0x123456(图1)。
当试图调用pass方法,并将hollis作为实参传递给形参user时,这个地址0x123456就会给用户,此时用户也指向这个地址(图2)。
然后在pass方法中修改参数的时候,也就是用户newuser(),会重新打开一个内存0x456789,分配给user。用户的任何后续修改都不会改变存储器0x123456的内容(图3)。
上面这个是什么传输?it这绝对不是引用传递。如果是,在执行usernewuser()时,实参的引用也应该改为指向0x456789,但它没有t.按引用传递是指调用函数时直接将实参的地址传递给函数,所以函数中参数的修改会影响实参。
所以,值传递和引用传递的区别不在于传递的内容。而是实际的参数是否已经被复制。在判断实参的内容是否受到影响时,要看传递的是什么。如果传递一个地址,要看这个地址的变化会不会影响,而不是看地址指向的对象的变化。就像钥匙和房子的关系一样。那么在这种情况下,为什么上面同样是传递对象,传递的string对象和user对象的性能结果是不一样的呢?我们在pass方法中使用名称hollischuang试图改变名称的值,这是一个错误。错了直接改了名字的参考地址。因为这段代码,我会给出一个新的字符串,然后给出对name的引用。原版"霍利斯"string仍然由实参持有,所以它没有被修改为实参的值。
所以,其实java中是传值的,但是对于对象参数来说,值的内容就是对象的引用。