杂记-Java传值与传地址

Java传值与传地址

Java中传值还是传址问题在我初学Java的时候一直都没有很好的理解它,一直都以为Java不存在传值,只有传地址,很迷惑Java有传值传址的问题吗?

这几天工作不是很忙把我想到的了解的整理一下,记录自己的成长历程。

Java到底传值还是传址?

  Java传值,传址都有的,并不是所有的都是传址。

Java什么时候传址,什么时候传值?

  Java的八种基本类型都是直接传值的,其他引用类型是地址传递。

如何证明Java传递的是值或是地址?

  使用System.out.println() 打印 如果打印结果是地址那就是传址如果是具体值那就是传值。(这样说有点偏颇,但可以这样大体判别,其中String是个例外)

为什么除String外的引用类型直接打印都是地址,而String是个例外呢?

  所有的引用数据类型都会继承Object,所有的打印都会走Object 的toString()方法,而String其实是一个char[],它自己重写了toString()方法。所以会打印值,而其他引用类型打印地址。

 传值与传址有什么不同吗?

  有的,传址的如果对象的值被改变那其他的对该对象的引用的值会同步的改变。而传值的修改对象的值,是不会对其他对象造成影响的,或者说无法传递改变。(String又是一个例外,它虽然传址,但缺无法传递修改)

为什么String传递的值无法被修改呢?

String是一个final 修饰的最终类,它的很多方法都被final修饰,final不可变(老子一脸的懵逼,一个问题引出了n个问题);

是所用的final 修饰的类都无法进行传址修改吗?

这个不知道,先空着,待我学习好了再写答案。现在老板安排活儿了。mpp

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章