Java中的=赋值
一直以来我对于这些都有些模糊,今天来写一篇博客总结一下。
在Java中,=赋值对于基本类型可以简单理解为就是直接传值
1 | int a = 1; |
我们可以看出我们把a赋值给b然后对b进行改变的时候a的值还是不会变。
所以在基本数据类型中,我们可以简单理解为=为传值。
而在对象中的=就不是赋值那么简单了,对于对象的=其实赋值的是对象的地址而不是内容,比如a = a1 ,假设这两个变量是对象,那么我们是将a1的地址赋值给a,那么a的地址就是a1的地址,即他们两共享同一地址,所以如果我们对a进行了操作,其实就是通过地址同时操作a1。
1 | StringBuilder s1 = new StringBuilder("123"); |
所以我们可以理解对于对象的=赋值的是对象的地址,除非我们再次new一个对象,将这个new的对象的地址重新赋值给s2。
1 | StringBuilder s1 = new StringBuilder("123"); |
我们可以看出当我们给s2重新赋值一个地址的时候这个时候的s2就与s1无关了,因为他们已经不是共享同一个地址了。
Java中的方法参数传递
我觉得方法参数传递和=赋值差不多。
1 | public class Test { |
总之记住一个就是Java中的参数传递就是按值传递,当我们传入的是一个对象的时候我们传入的是地址,我们传入一个基本类型的时候传入的是一个值,我们也可以简单理解为地址就是对象的值。
其实也可以这么理解,基本类型的值在栈中,即栈中的的值,然后对象的地址在栈中,这个地址指向堆中的内容,我们可以简单理解为传值就是传入栈中的内容。