引用传递:

不同栈内存可以指向同一块堆内存,不同栈内存可以对一块堆内存进行修改

范例一:

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());
}
}

最新文章

  1. C++ 控制台代码输出控制
  2. Resellerclub –Cpanel 主机中如何设置 index 缺省首页
  3. 设计模式C#实现(十二)——装饰模式
  4. 使用 screen 管理你的远程会话
  5. history 清空历史记录 或 history不记录历史命令
  6. kali安装nautilus-open-terminal不起作用
  7. JavaScript学习笔记(11)——HTML DOM Event对象
  8. 转:Java Annotation详解
  9. R语言学习笔记之外部文件读取
  10. sql 添加用户
  11. ios7学习之路六(隐藏状态栏 )
  12. 前端MVC学习笔记(三)——AngularJS服务、路由、内置API、jQueryLite
  13. Struts2 stracture
  14. Android 中使用 dlib+opencv 实现动态人脸检测
  15. RABBITMQ too many heartbeats missed
  16. JavaScript模块化思想
  17. 编码器AE & VAE
  18. cocoapods卸载与安装
  19. BZOJ2140: 稳定婚姻(tarjan解决稳定婚姻问题)
  20. 正则工具类 -- RegexUtils

热门文章

  1. 书单list
  2. 分布式一致性协议-2PC与3PC(二)
  3. 点击底部input输入框,弹出的软键盘挡住input(苹果手机使用第三方输入法 )
  4. iOS之限制TextField的输入长度
  5. 一次tomcat的调优记录
  6. 复习宝典之Mysql数据库
  7. vue-scroller使用
  8. 需求:加一个下拉框选择条件改变饼图内外环 饼图:百度echarts提供
  9. Jlink-10 pin 的定义(stm32使用)官方定义
  10. STM32 HAL库学习系列第5篇 定时器TIM---编码器接口模式配置