Java中的值传递和引用传递

今天复习Java基础,发现有一个概念好像有点模糊了,就是值传递,Think in Java中说Java只有值传递。

上网看了好多的博客分析,各有各的说法,有的说只有值传递,有的说有值传递和引用传递,争论的焦点就是对象的传递。

系统的说一下:Java中有2种参数传递,一种是基本类型参数,一种是引用类型参数。

基本类型参数的传递方式基本没有什么争论,即:Java应用程序中在传递基本类型参数时会copy一份值,因为基本类型的值是存在栈中的,也就是当你在方法中改变参数的值是不会影响调用者的值的。

引用类型参数的传递方式有争论:我认为是引用传递,但是从严格意义上来讲,引用也是栈中的值,引用指向的堆中的对象就是值。不管怎么样,引用类型的参数传递就是引用传递,但是那个引用指向的堆中对象还是调用者的对象,所以也可以理解为值传递。

引用一下一位同学的话:
“其实按值还是按引用的区别在于‘是否在传递的时候进行对象的内存拷贝’,java中基本类型是由于在JVM中存储区域不同于普通对象所以传递前会拷贝,传递的是拷贝后的值,但是对象在传递的时候不拷贝,直接传“引用值”,指向同一片对象堆内存区域。”

在编写Java应用程序时,需要注意传递基本类型参数时不能在方法中赋值,因为这可能得不到你想要的结果。

ps:注意string类和包装类的final属性。虽然是引用类型,但是每当改变它们的时候都会创建新的对象。所以和基本类型的结果是一样的。

欢迎指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引...
    峰峰小阅读 2,812评论 0 1
  • 引言 学习过C语言的同学都很清楚在c中调用方法的参数有值传递和引用传递两种方式。关于值传递和引用传递网上有许多的博...
    宁愿呢阅读 5,231评论 0 4
  • 方法调用是编程语言中非常重要的一个特性,在方法调用时,通常需要传递一些参数来完成特定功能。 我们首先观察一个简单的...
    小人物灌篮阅读 3,570评论 0 0
  • DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在W...
    func_老衲姓罗阅读 9,229评论 0 1
  • 永远不要给自己设限,生活时刻在变。
    斐丽希娅阅读 747评论 0 0