方法传递参数&按值传递和按引用传递

简介:

方法传递参数:

   方法就像一个任务要做一件事情,而参数就是一个事情里所需要给予的条件。就像要去买东西这样一件事情,这件事情的参数是需要购买物品的钱,需要传递一个“钱”的参数给这个方法它才能进行执行。例如:

wKioL1nnes-TnxIjAAl6SLt7rbE230.png

  释义:method方法声明了一个int类型的参数,参数名为a。在main方法里调用method方法时就需要给它传递一个参数值,参数值要求符合类型且不超过类型的存储范围。此时给method传递的值是10,所以打印的结果就是10



如果方法声明了参数,在调用此方法时不传递参数值就会报语法错误。例如:

wKiom1nnfYiz1cH6AAf0FDZScf4977.png




按值传递:

  在传递参数值中有按值传递和按引用传递。所有的基本数据类型都是按值传递,按值传递就是把值复制一份过去,不会对原本的变量产生影响,给方法传递的是值。所以即便在方法里改变了传递的值,但它原本的值也不会有改变。因为给它传递的是值而不是原本的内存地址引用。例如:

wKioL1nnetrTfPNVAA1BRsNesGY105.png

  在main方法里将i的值传递给了参数a,传递的是一个值,所以参数a做出的改变并不会影响到变量ii的输出的结果还是10a的输出的结果则是100




按引用传递:

  除了基本数据类型以外的值都是按引用传递,按引用传递其实就是按地址传递,给参数传递的是同一片内存地址,传递后参数和变量指向的都是同一个内存地址。所以参数做出改变,原本的变量值也会随之而改变。因为它传递的是内存地址,这是按引用传递和按地址传递最大的区别。例如:

wKiom1nnfZmjLm_nAA9RdbpJVQo215.png


  数组是八种基本数据类型之外的类型,所以传递参数值时是按引用传递的,也就是按内存地址传递了一个引用。传递后此时数组i和参数a指向的都是使用的同一个内存地址,a的值发生了改变,i的值也会随之发生改变,所以打印的结果都111。就像两个人在同一碗粥一样,他们都是共同使用同一个资源,只要其中一个人对这个资源进行了改变,那么另一个也会受到影响。



  在java中是不可以对内存地址进行改变的,但是在C语言则可以通过内存指针对内存地址进行改变。所以按值传递在C语言里可以将它们的值都指向同一个内存地址,就变成类似于按地址传递的效果了。例如:

wKioL1nneuyRtwJ0AA8SYTZNInY076.png

通过内存指针改变内存地址后i的值和num的值都是指向同一个内存地址。所以i的值发生改变num的值也会随之改变。




本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1974010,如需转载请自行联系原作者

相关文章
|
2月前
|
C++
C++函数与值传递
C++函数与值传递
12 0
|
7月前
|
C++ Python
Python函数参数传递:传值还是传引用
Python函数参数传递:传值还是传引用
38 0
|
10月前
我应该使用按值调用还是按引用调用?
我应该使用按值调用还是按引用调用?
|
6月前
|
Python
python之函数的参数传递(引用传递和值传递),查看变量的内存地址的方法
python之函数的参数传递(引用传递和值传递),查看变量的内存地址的方法
|
9月前
|
数据处理
参数传递是什么?参数传递的是什么?
避免代码冗长,防止代码的仿佛书写。前面的博客中有说明,这里不做过多赘述
|
10月前
值传递与引用数据类型传递
值传递与引用数据类型传递
31 0
|
11月前
|
Java
辨析Java方法参数中的值传递和引用传递
辨析Java方法参数中的值传递和引用传递
75 0
|
Java
Java面向对象-方法的值传递和引用传递
Java面向对象-方法的值传递和引用传递
92 0
|
存储 C语言
指针妙用之将函数中形参的值传递给实参
指针妙用之将函数中形参的值传递给实参
|
C++
C++学习014函数值传递和地址传递
当我们给一个函数传参数的时候,可以直接值传入函数,也给可以把一个地址传入函数
96 0