Java值传递与引用传递

1、形参与实参

  1. 形参:方法被调用时传递的参数,如:
    fun(int a)
    中的a,只有在fun被调用期间a才被分配内存空间,在fun方法被执行完成后,a就会被销毁释放空间。
  2. 实参:方法被调用时传递的实际值,在方法被调用前就已经初始化并在被调用时传入。
public static void fun(int b){
 b=20;
 System.out.println(b);
}
public static void main(String[] args) {
 int a=10;//变量
 fun(a);
}

其中,
a在被调用前就已经被初始化,在调用fun方法时,a被当作参数传入,故a为实参;
b在fun被调用时才被分配内存空间,在fun结束后,b即被释放,故b为形参。

2、数据类型

基本类型

4种整数类型:byte、short、int、long
2种浮点数类型:float、double
1种字符类型:char
1种布尔类型:boolean

引用类型


接口
数组


在图中,num是基本类型,值na存在变量中;str是引用类型,变量中保存的是对象的地址,引用指向实际对象。

3、赋值运算符的作用

num = 20;
str = "java";


对于基本类型num,赋值运算符会直接改变变量的值,原值会被覆盖掉。
对于引用类型str,赋值运算符会改变引用中保存的地址,原来的地址会被替换掉,但原来的对象不会改变

4、值传递和引用传递的理解

值传递

在方法的调用过程中,实参把值复制给了形参,实参的值不变。

引用传递

引用传递弥补了如果值传递的数据量过大,复制时造成的内存浪费情况。
引用传递就是将对象的地址值传递过去,在方法的执行过程中,形参和实参的地址值相同,指向同一块地址,故方法的执行会影响到原对象。

public class Example {
	String str = new String("hello");
	char[] ch = {'a', 'b'};
	public static void main(String[] args) {
		Example ex = new Example();
		ex.change(ex.str, ex.ch);
		System.out.println(ex.str + " and");
		System.out.println(ex.ch);
	}
	
	public void change(String str, char[] ch) {
		str = "ok";
		ch[0] = 'c';
	}
}

输出是:

hello and

cb

过程分析:

  1. 为对象分配内存空间

  1. 执行change()方法
    执行前实参(黑色)和形参(红色)的指向如下:
  2. 打印

Summery

  1. 基本数据类型传值,形参的修改不会影响实参。
  2. 引用类型传递的是引用,对参数的修改会影响到实际对象。
  3. String,integer,Double等类型的传递为传值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值