值参数
x就是传值参数,我们在方法里操作的是y的副本,不管怎么操作,y是不变的。
引用类型
下面的例子表示:在调用函数内部创建的stu所修改的属性值不会影响在调用函数外对象的属性值。
但,当我们函数外和函数内的stu.name都是Tim的时候,如何分辨是不是同一个对象呢
可以使用所有Object都有的GetHashCode方法来判断
引用参数
引用参数和传值参数不同。引用参数并不会创建副本,引用参数的存储地址就是方法调用时实际参数的内存地址。
ref修饰符显式指出我要用你了,有意的用你
值类型的引用参数
下面的例子:
引用类型的引用参数
类型引用参数和值参数的区别
对于类型引用参数来说,如果没有在方法体里new一个对象,则只会改变原有对象的属性,hashcode不会发生改变
没有ref的情况
有ref和没有ref虽然执行的结果相同,但要注意。
有ref的时候,outterStu和stu指向的是同一个堆内存
没有ref的时候,outterStu和stu指向的不是同一个堆内存,但不同堆内存里的地址值是一样的。
输出参数
一次生产,一次输出,return
一次生产,多个输出,输出参数
out关键字
值类型:
下面就是利用out关键字自己实现了tryParse的方法
result 负责接收实现的结果,还会返回true来表明实现过程中是否有异常发生
引用类型的输出参数
数组参数
以前我们计算一组数组之和的程序如下
有了params参数后
就可以直接在方法里写对应的数字了,简单高效
知识扩展,split.
具名参数
可选参数
有的参数可写可不写
当声明的时候具有默认值的时候,参数可以不写
扩展方法(this 参数)
实现double类的round方法