JAVA参数传递方式

java语言只有值传递!
java语言只有值传递!
java语言只有值传递!

基本类型

  • 基本类型的传递过程包含“求值”、“拷贝”、“传递”三个过程,这样使得对形参的改变不会体现到实参上。

对象类型

  • 每个可用的对象都有一个或者多个引用指向这个对象,在实参传递给形参的过程中,和基本数据类型一样,会对实参引用执行“求值”、“拷贝”、“传递”三个过程,这样形参可以获取到原引用的一个拷贝,同基本数据类型一样,修改引用与对象之间的引用关系,不会体现到实参引用上。
  • 由于实参、形参指向同一个对象,所以通过不同引用都能操作到同一个对象,这样对于对象的传递,看起来和引用传递表现地一样,同时,因为本身作为值传递,不会破环不同引用的引用关系。

总结

  • java仅包含值传递

  • 基本类型属于值传递

  • 对象类型也属于值传递,传递的是引用本身——它是值传递的一种特殊形式,可以称之为“传共享对象调用(共享对象传递)”。

    • 它保留了值传递的特性——不会破环不同引用各自的引用关系(“引用关系的更改”对于实参和形参之间是不可见的)。
    • 同时实现了引用传递的特性:通过引用操作对象时,操作结果对于形参和实参都是可见的。
  • 特殊性:String类,由于String在赋值的时候(更直接地说:更改的时候),会创建新对象(常量池中不存在时)。

    • 所以它保留了“共享对象传递”传递的特性(对引用直接赋值,不会破坏其它引用与对象间的引用关系)

    • 同时,通过特殊的赋值操作,看起来跟操作基本数据类型一样(“更改”对于实参和形参之间是不可见的)。对String引用进行赋值的时候,实际上是改变了引用与对象间的引用关系,这样就和基本类型表现是一致的。

      ==================================================================================
      采用什么方式传递值,只是程序语言设计的过程中采用了不同的求值策略,关于求值策略个人也不甚了解。关于是都采用值传递,个人观点是:在传递过程中是否发生了“拷贝”操作,可以拷贝值本身,也可以拷贝引用(这里的引用只java中的引用,不是C++中的),欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值