引用传递:

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

范例一:

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

JAVA基础学习之路(十一)引用传递的更多相关文章

  1. JAVA基础学习之路(一)基本概念及运算符

    JAVA基础概念: PATH: path属于操作系统的属性,是系统用来搜寻可执行文件的路径 CALSSPATH: java程序解释类文件时加载文件的路径 注释: 单行注释  // 多行注释 /*... ...

  2. JAVA基础学习之路(六)数组与方法参数的传递

    通常,向方法中传递的都是基本数据类型,而向方法中传递数组时,就需要考虑内存的分配 public class test2 { public static void main(String args[]) ...

  3. JAVA基础学习之路(五)数组的定义及使用

    什么是数组:就是一堆相同类型的数据放一堆(一组相关变量的集合) 定义语法: 1.声明并开辟数组 数据类型 数组名[] = new 数据类型[长度]: 2.分布完成 声明数组:数据类型 数组名 [] = ...

  4. Java基础学习笔记二十一 多线程

    多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念.进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线 ...

  5. JAVA基础学习之路(十二)链表

    定义链表的基本结构: class Link {//外部类 //内部类,只为链表类服务 private class Node {//定义节点类 private String data;//保存的数据 p ...

  6. JAVA基础学习之路(八)[1]String类的基本特点

    String类的两种定义方式: 直接赋值 通过构造方法赋值 //直接赋值 public class test2 { public static void main(String args[]) { S ...

  7. JAVA基础学习之路(七)对象数组的定义及使用

    两种定义方式: 1.动态初始化: 定义并开辟数组:类名称 对象数组名[] = new 类名称[长度] 分布按成:类名称 对象数组名[] = null: 对象数组名 = new 类名称[长度]:   2 ...

  8. JAVA基础学习之路(四)定义简单java类

    简单java类开发一般原则: 类名称必须有意义,再怎么说,要让人家看的明白吧 类之中所有属性必须使用private封装,并提供setter,getter方法 类之中可以有多个构造方法,但是必须保留有一 ...

  9. JAVA基础学习之路(三)类定义及构造方法

    类的定义及使用 一,类的定义 class Book {//定义一个类 int price;//定义一个属性 int num; public static int getMonney(int price ...

随机推荐

  1. 用jQuery-Easy-UI编写注册页面

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Java中的IO流(六)

    上一篇<Java中的IO流(五)>把流中的打印流PrintStream,PrintWriter,序列流SequenceInputStream以及结合之前所记录的知识点完成了文件的切割与文件 ...

  3. iOS:位置相关(18-03-09更)

    1.定位设置 2.定位页面逻辑 1.定位设置 2.定位页面逻辑 1).第一次进入该VC,在 viewDidLoad 调用刷新页面 refreshLocationView .这时用户还没决定,会刷出“正 ...

  4. Web | JavaScript的闭包

    闭包 function outter(){ var a = 1; function inner(){ console.log(a); } return inner; } //进行函数调用 var in ...

  5. crashes

    iOS 僵尸对象调试 - 简书 iOS APP审核被拒的解决之道(2.1) - - ITeye博客 iOS应用崩溃日志分析 - CocoaChina 苹果开发中文站 - 最热的iPhone开发社区 最 ...

  6. JAVA 设计模式之原型模式

    目录 JAVA 设计模式之原型模式 简介 Java实现 1.浅拷贝 2.深拷贝 优缺点说明 1.优点 2.缺点 JAVA 设计模式之原型模式 简介 原型模式是六种创建型设计模式之一,主要应用于创建相同 ...

  7. UVA 400 - Unix ls (Unixls命令)

    csdn : https://blog.csdn.net/su_cicada/article/details/86773007 例题5-8 Unixls命令(Unix ls,UVa400) 输入正整数 ...

  8. 20155209 2016-2017-2 《Java程序设计》第二周学习总结

    20155209 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 类型总结:常用定义byte(符号%d):short(符号%d):int(符号%d):long ...

  9. 20155304田宜楠-第三次作业:虚拟机的安装与Linux学习

    安装VirtualBox虚拟机 安装VirtualBox虚拟机 这一步很简单,参考老师给的教程一步步安装,很快就完成了. 2.安装Ubuntu 这一步可是让我吃尽了苦头,我按照老师给的下载地址成功下载 ...

  10. 20155317 王新玮 2016-2017-2 《Java程序设计》第5周学习总结

    20155317 王新玮 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 异常处理 & Collection与Map 异常继承架构 错误的对象继承ja ...