java基础---值传递和引用传递

在java中,涉及到的传递方式有值传递引用传递

Java中的基本数据类型在参数传递的过程中都是值传递,所以在参数传递的时候方法内部改变了变量的值,但是实际上,跳出方法后该变量的值后发现没有改变。因为值传递传递的是数值本身,不涉及到变量地址的问题。

除了基本数据类型之外的引用数据类型,都是引用传递,在参数传递的过程中,传递的是变量的地址,在方法内部改变了该变量的值之后会发生参数的数值发生改变。

String类型的需要注意,在参数传递过程中虽然也是引用传递,但是你所做的变量值改变的操作,都是直接在堆内存中直接开辟了另外一个空间来存储新的变量,在方法内部只是改变了栈内存中变量的指针而已,但是跳出方法之后,依然指向的是原先的变量值。


String s = new String("ss");这句话在内存中是这样的:占中存放 s ,堆中实际上开辟了两块内存空间,一个是字符串“ss”,一个是String对象对象中的属性值是ss。字符串ss会成为垃圾,s变量指向的是String对象。

在执行change过程中,堆中会开辟两块内存,一个存储字符串“ll”,一个存储字符串“ssll”,而变量s指向的是ssll,但是跳出change以后,s依旧指向的是原来的堆内存,所以你看到的变量值是没有改变的。

总结:平常若是涉及到字符串的拼接动作,那么就是用StringBuilder类,在内存中只会声明一个对象,而String类则会消耗大量的内存导致内存浪费。


猜你喜欢

转载自blog.csdn.net/qq_32182461/article/details/79918457