JAVA基础学习之路(十一)引用传递
2024-10-01 11:41:38
引用传递:
不同栈内存可以指向同一块堆内存,不同栈内存可以对一块堆内存进行修改
范例一:
class Message {
private int num = 10;
public Message(int num) {
this.num = num;
}
public void setNum(int num) {
this.num = num;
}
public int getNum() {
return this.num;
}
} public class test1 {
public static void main(String args[]) {
Message msg = new Message(30);
fun(msg);//引用传递
System.out.println(msg.getNum());
}
public static void fun(Message temp) {
temp.setNum(100);
}
}
//输出 100
内存分析:
范例二:
public class test1 {
public static void main(String args[]) {
String msg = "hello";
fun(msg);//引用传递
System.out.println(msg);
}
public static void fun(String temp) {
temp = "world";
}
}//输出:hello
输出结果仍为hello,msg的值没有被改变
原因:String类对象的内容一旦声明,则不可改变。对象内容的改变,依靠的是引用地址的改变
范例三:
class Message {
private String info = "nihao";
public Message(String info) {
this.info = info;
}
public void setInfo(String info) {
this.info = info;
}
public String getInfo() {
return this.info ;
}
} public class test1 {
public static void main(String args[]) {
Message msg = new Message("hello");
fun(msg);//引用传递
System.out.println(msg.getInfo());
}
public static void fun(Message temp) {
temp.setInfo("world");
}
}//输出world
内存分析:
class Member {
private int mid;
private String name;
private Member child;
private Car car;
public Member(int mid, String name) {
this.mid = mid;
this.name = name;
}
public String getInfo() {
return "编号:"+this.mid+"\n"+
"名字"+this.name;
}
public void setCar(Car car) {
this.car = car;
}
public Car getCar() {
return this.car;
}
public void setChild(Member child) {
this.child = child;
}
public Member getChild() {
return this.child;
}
} class Car {
private Member member;
private String name;
public Car(String name) {
this.name = name;
}
public String getInfo() {
return "车的名字"+name;
}
public void setMember(Member member) {
this.member = member;
}
public Member getMember() {
return this.member;
}
} public class test1 {
public static void main(String args[]) {
Member m = new Member(1,"张三");
Member ch = new Member(2,"李四");
Car c = new Car("宝马");
Car cc = new Car("奔驰"); m.setCar(c);
c.setMember(m); ch.setCar(cc);
cc.setMember(ch);
m.setChild(ch); System.out.println(m.getCar().getInfo());
System.out.println(c.getMember().getInfo());
System.out.println(m.getChild().getCar().getInfo());
}
}
最新文章
- C++ 控制台代码输出控制
- Resellerclub –Cpanel 主机中如何设置 index 缺省首页
- 设计模式C#实现(十二)——装饰模式
- 使用 screen 管理你的远程会话
- history 清空历史记录 或 history不记录历史命令
- kali安装nautilus-open-terminal不起作用
- JavaScript学习笔记(11)——HTML DOM Event对象
- 转:Java Annotation详解
- R语言学习笔记之外部文件读取
- sql 添加用户
- ios7学习之路六(隐藏状态栏 )
- 前端MVC学习笔记(三)——AngularJS服务、路由、内置API、jQueryLite
- Struts2 stracture
- Android 中使用 dlib+opencv 实现动态人脸检测
- RABBITMQ too many heartbeats missed
- JavaScript模块化思想
- 编码器AE &; VAE
- cocoapods卸载与安装
- BZOJ2140: 稳定婚姻(tarjan解决稳定婚姻问题)
- 正则工具类 -- RegexUtils