引用传递:

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

范例一:

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. NPOI下载

    .吐槽NPOI下载 众所周知我们用NPOI第三方程序集主要的目的就是为了能快捷的操作Excel,但是现在不论是官网(https://archive.codeplex.com/?p=npoi)还是git ...

  2. System.Reflection 获取描述

    我们需要获取类,属性,方法的描述.这个跟获取枚举的描述一样,需要我们通过反射来做.这还需要我们的利用System.ComponentModel:Description  的属性来完成. 新建一个类:使 ...

  3. Notes 20180311 : String第三讲_深入了解String

    很多前辈我可能对于我的这节文章很困惑,觉得String这个东西还有什么需要特别了解的吗?其实不然,String是一个使用十分频繁的工具类,不可避免地我们也会遇到一些陷阱,深入了解String对于我们避 ...

  4. Linux-- 查看文件 more与其它

    more 翻页查看 用法:more 文件名 nl 显示行号打印(不常用) 1.不打印空白行行号:nl -b t 文件名 类似 cat -b 文件名 2.打印所有行行号:nl -b a 文件名 类似 c ...

  5. DBCP数据库连接池的简单使用

    0.DBCP简介      DBCP(DataBase connection pool)数据库连接池是 apache 上的一个Java连接池项目.DBCP通过连接池预先同数据库建立一些连接放在内存中( ...

  6. 11JavaScript事件

    JavaScript 事件 HTML 事件是发生在 HTML 元素上的事情. 当在 HTML 页面中使用 JavaScript 时, JavaScript 可以触发这些事件. 1.HTML 事件 HT ...

  7. 使用Hexo + GitHub Pages 搭建个人博客

    一.前言 之前是在CSDN上写博客的,但是无奈其广告满天飞,还有因为个人不太喜欢CSDN博客里的一些东西,加上看到很多技术大牛都有自己的个人博客,于是乎!便想着搭建一个自己的个人博客.其实之前写博客还 ...

  8. 远程查看java虚拟机内存使用情况jconsole

    jconsole 查看虚拟机使用情况 1.在远程机的tomcat的catalina.sh中加入配置: JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.host ...

  9. HTML学习笔记--元素

    1. 开始标签称为起始标签,结束标签称为闭合标签 openging tag closing tag HTML 元素以开始标签起始 HTML 元素以结束标签终止 元素的内容是开始标签与结束标签之间的内容 ...

  10. Python用@property使类方法像属性一样访问

    class Screen(object): @property #读取with的值getter方法 def width(self): return self._width @width.setter ...