JAVA中参数传递的概念
来源:互联网 发布:为知笔记本地部署 编辑:程序博客网 时间:2024/06/03 12:29
在java开发中,频繁的会用到参数传递的时候,有时候发现值发生了变化,有时候发现值却没有改变,究其原因原来java中参数传递虽然是值传递,
但值传递也分两种的:
1、按值传递(by value)
适用范围:8种基本数据类型、String对象
特点:在内存中复制一份数据,把复制后的数据传递到方法内部
作用:在方法内改变参数的值,外部的数据不会跟着发生改变
2、按引用地址传递(by address)
适应范围:数组、Object对象(除String以外)
特点:将对象的引用地址传递到方法的内部
作用:在方法内部修改对象的内容后,外部的数据也会跟着发生变化
示例代码:
package test;
/***
* 测试JAVA中参数传递的变化:
* JAVA的参数传递总是传"值",
* 但是传值方式也分为两种方式,它们是靠传递参数的类型区分的。
* 这两种类型分别为:JAVA的基础类型和Object(对象)类型;
* 基础类型包括boolean,byte,short,char,int,long,float,double,而Object就是对象
* @author harver
*
*/
public class ParameterPass {
public static void main(String[] args) {
int[] a = {1, 2};
test(a[0], a[1]);
System.out.println("a[0]:" + a[0] + ",a[1]:" + a[1]);//a[0]:1,a[1]:2
test2(a);
System.out.println("a[0]:" + a[0] + ",a[1]:" + a[1]);//a[0]:2,a[1]:1
int[] b = new int[1];
b[0] = 3;
test3(b);
System.out.println("b[0]:" + b[0]);//b[0]:2
int[] c = new int[1];
c[0] = 3;
test4(c);
System.out.println("c[0]:" + c[0]);//c[0]:3
test5(c);
System.out.println("c[0]:" + c[0]);//c[0]:4
}
private static void test(int i, int j) {
int temp = i;
i = j;
j = temp;
}
private static void test2(int[] a) {
int temp = a[0];
a[0] = a[1];
a[1] = temp;
}
private static void test3(int[] b) {
b[0]--;
}
//hashCode不一致,代表所引用堆中的地址值发生了变化.
private static void test4(int[] c) {
//System.out.println(c.hashCode());
c = new int[1];
//System.out.println(c.hashCode());
c[0] = 4;
}
//hashCode一致,代表所引用堆中的地址值是同一地址.
private static void test5(int[] c) {
//System.out.println(c.hashCode());
c[0] = 4;
//System.out.println(c.hashCode());
}
}
对于是不是同一个对象,可以在方法内部比较下传递进来的对象的hashcode值与修改数据之后的hashcode值是否相等,
如果相等,说明是引用的同一个对象。不相等,则方法内部修改的数据内容就不会影响到了外部的数据
- JAVA中参数传递的概念
- java中参数的传递
- java中参数的传递
- java中参数的传递
- Java中参数的传递
- java中参数传递
- java中参数传递
- java中参数传递
- java中参数传递
- java中参数传递
- java中参数传递
- java中函数参数的传递
- Java中参数传递的问题
- Java中函数的参数传递
- java中参数传递的研究
- Java中参数传递的问题
- java中参数传递的方式
- java中函数的参数传递详解
- window/linux(ubuntu/linuxMint) 双系统不能启动终极解决办法
- 目前data、uploads有执行.php权限,非常危险,需要立即取消目录的执行权限
- POJ 2046 Gap 搜索- 状态压缩
- SRM 212 Div II Level Three: LargestCircle,Brute Force
- 诡计
- JAVA中参数传递的概念
- 函数内部临时变量
- 2013年7月6日 20:40:21
- WebView利用UserAgent传递SESSIONID
- 杭电OJ——1032 The 3n + 1 problem
- ZOJ 1962 How Many Fibs?
- ubuntu lamp的部署
- 火车头采集多张图片
- 急转