2022.0501学习Java笔记之引用传递分析

引用传递是整个Java基础的灵魂部分 以下有三个程序分析

第一道

class Demo{
	private int num;
	public Demo(int num){
		this.num = num;
	}
	public void setNum(int num){
		this.num = num;
	}
	public int getNum(){
		return num;
	}
}
public class TextDemo7{
	public static void main(String args[]){
		Demo demo = new Demo(10);
		fun(demo);
		System.out.println(demo.getNum());
	}
	public static void fun(Demo temp){
		temp.setNum(30);
	}
}

输出结果为30 

图解

这是一个最基础的引用传递,在方法之中只需要接受Demo类对象,就表示两个栈内存同时指向一块堆内存所作的修改一定可以保留下来。

第二道

public class TextDemo7{
	public static void main(String args[]){
		String str = "Hello";
		fun(str);
		System.out.println(str);
	}
	public static void fun(String temp){
		temp = "World";
	}
}

输出结果为Hello 

图解

 

本题解释只有一句话“字符串一经声明,不得更改”

数值传递

public class TextDemo7{
	public static void main(String args[]){
		int x = 10;
		fun(x);
		System.out.println(x);
	}
	public static void fun(int temp){
		temp = 20;
	}
}

输出结果为10 

本程序属于一个数值关系,传递到方法里面的数据就相当于是一个数据的拷贝,至于方法里面如何修改与之前无关

对于String这种数据类型由于自身的特殊性所决定的操作模式(不可该变模式) 如果难以理解,就按基本数据类型的方式理解。

第三道

class Demo{
	private String msg;
	public Demo(String msg){
		this.msg = msg;
	}
	public void setMsg(String msg){
		this.msg = msg;
	}
	public String getMsg(){
		return this.msg;
	}
}
public class TextDemo7{
	public static void main(String args[]){
		Demo demo = new Demo("Hello");
		fun(demo);
		System.out.println(demo.getMsg());
	}
	public static void fun(Demo temp){
		temp.setMsg("World");
	}
}

输出结果为World

此程序与第一道程序分析严格说是一样的,下面以两种情况进行分析

1.把String当成普通数据类型理解

 

以上分析并不严谨,毕竟String是引用数据类型 

2.用完整的关系分析 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值