关于Java函数中的传值问题
来源:互联网 发布:微信加友软件人脉神器 编辑:程序博客网 时间:2024/05/30 22:52
最近编程的时候经常遇到编写工具类的情况,有时候是对传入的值进行修改,有的是返回一个变量。那么出现了一个问题当是对传入的值进行修改的时候需要返回吗?如果不返回能否达到修改的目的呢?那么就引申到了Java函数的传值问题了。下面给大家讲一下Java中的函数调用传值问题。
1、问题的起源
问题起源于c语言,先看下面一段代码。
#include <stdiu.h>//传值调用void change(int a,int b){ int flag = a; b = a; a = flag;}//传址调用void change2(int *a,int *b){ int flag = *a; *a = *b; *b = flag;}void main(){ int a = 1; int b = 2; //传值调用,因此主函数中的a,b的值不会改变 change(a,b);//->a=1,b=2 //传址调用,因此改变的是地址上的内容,因此主函数中的a,b的值发生改变 change2(&a,&b);//->a=2,a=1}
这段代码中是c语言中的传址、传值调用。其中传值调用是指的传入函数中的变量只传入相应的值,也就是说变量本身的内容不会发生改变(也就是说change中的a,b与main中的a,b不是相同的变量);传址调用是指,传入子函数的是变量的地址,也就是说子函数改变的就是地址上的内容(也就是change2中的*a,*b就是main中的a,b)。
2、Java中的函数(方法)调用是哪种方式?
Java中的函数调用大体分三类:
(1)8大基本类型(byte,short,int,long,float,double,char,boolean)
8大基本类型是运用的传值调用,看一下例子:
public void change(int a,int b){ int flag = a; a = b; b = flag;}public static void main(String args[]){ int a = 1; int b = 2; change(a,b);//->a=1,b=2}
(2)引用类型
引用类型往函数中传入的是引用,而引用中存储的其实就是存储地址,也就是变形后的传址调用。
public void change(StringBuffer a,StringBuffer b){ StringBuffer flag = new StringBuffer(a); b = a; a = flag;}pubic static void main(String args[]){ StringBuffer a = new StringBuffer("1"); StringBuffer b = new StringBuffer("2"); change(a,b);//->a="2",b="1"}
(3)特殊的String类型
大家都知道,其实String类型也是引用类型,但是它并不适用(2)中所说的传址调用,大家看一下代码
public void change(String a,String b){ String flag = a; b = a; a = flag;}pubic static void main(String args[]){ String a = "1"; String b = "2"; change(a,b);//->a="1",b="2"}
打断点我们可以看出,子函数中的a,b与main函数中的a,b并不一样,可以看出String类型实际上是传值调用。
3、结论
Java中基本类型加String类型都是传值调用,其余的引用类型都是传址调用。大家在用Java函数时要注意一下变量是否改变哟!
阅读全文
0 0
- 关于Java函数中的传值问题
- 关于java中的值传递问题
- java的main函数中的args数组传值问题
- 关于java中的clone()函数
- 关于java中的split函数
- Java 关于paintComponent函数问题
- 关于java中的存储问题
- 关于java中的编码问题
- 关于java 中的继承问题
- 关于java中的编码问题
- 关于子类构造函数中的super问题
- 关于VC开发中的函数调用问题
- 关于多线程中的可重入函数问题
- 关于oracle数据库中的时间函数问题
- 关于多线程中的可重入函数问题
- 关于调用函数中的参数输出问题
- 关于setTimeout函数中的闭包问题
- 关于JS中的eval()函数问题
- ubuntu下安装codeblock
- 《数学之美》PDF
- TCP粘包分析
- IMWeb提升营Day3 | 训练题13:调整数字顺序使奇数位于偶数前面
- wampserver下的mysql不能运行以及windows下mysql的启动后马上停止关闭
- 关于Java函数中的传值问题
- zookeeper简介
- 状态设计模式
- 《算法设计与分析基础 第二版》pdf
- 学习淘淘商城第七十八课(LVS+Nginx负载均衡(包括两种开机启动方法)----中篇)
- DeepLearning(基于caffe)实战项目(8)--修改caffe源代码从添加loss(层)函数开始
- oracle 12c R2 rac安装
- 【LeetCode】542. 01 Matrix
- 归并排序