java面试宝典-传值和传引用

      对于基本类型变量,java是传值的副本,对与一切对象型变量,java都是传引用的副本。

      参数类型是简单类型的时候,是按值传递,实际上是将参数的值作为一个副本传进方法函数的,那么在方法函数中不管怎么改变其值,其结果都是只改变了副本的值,而不是源值。

      java方法参数传对象,传的是对这个对象引用的一份副本,即地址值,跟原来的引入都是指向同一个对象。

      下面例子是学习java面试宝典里面的小例子,拿来记录参考。

      简单类型的值传递:

public class Test1 {

	public static void test(boolean test) {
		test = !test;
		System.out.println("In test(boolean):test = " + test);
	}
	public static void main(String[] args) {
		boolean test = true;
		System.out.println("Before test(boolean):test = " + test);
		test(test);
		System.out.println("After test(boolean):test = " + test);
	}
}

打印效果:

Before test(boolean):test = true
In test(boolean):test = false
After test(boolean):test = true

分析:在test(boolean test)方法中改变了传进来的参数值,但对这个参数源变量本身并没有影响,即对main方法里面的test变量没有影响,说明参数类型是简单类型的时候,

是按值传递的。实际上是将参数的值作为一个副本传进方法函数的,那么在方法函数中不管怎么改变其值,其结果都是只改变了副本的值,而不是源值。


引用对象传递:

//引用对象传递
	public static void test(StringBuffer str) {
		str.append(",world");
	}
	public static void main(String[] args) {
		StringBuffer string  = new StringBuffer("Hello");
		test(string);
		System.out.println(string);
	}

分析:test(String)调用了test(StringBuffer str)方法,并将string作为参数传递了进去。这里的string是一个引用,java对于引用形式传递对象类型的变量时,实际上是将引用作为一个副本传进方法函数的。那么这个函数里面的引用副本所指向的是什么呢?是对象的地址。通过引用副本(复制的钥匙)找到地址(仓库)并修改地址中的值,也就是修改了对象。

对比简单类型值传递:

//简单类型值传递
	public static void test(String str) {
		str = str +",world";
	}
	public static void main(String[] args) {
		String string  = new String("Hello");
		test(string);
		System.out.println(string);
	}

案例题:

class Value {
	public int i = 15;
}

public class Test {
	
	public static void main(String[] args) {
		Test t = new Test();
		t.first();
	}

	private void first() {
        int i = 5;
        Value v = new Value();
        v.i = 25;
        second(v,i);
        System.out.println(v.i);
	}

	private void second(Value v, int i) {
		i = 0;
		v.i = 20;
		Value val = new Value();
		v = val;
		System.out.println(v.i + "  " + i);
		
	}
}

输出:

15  0
20


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值