首页 > 编程语言 >Java之引用传递

Java之引用传递

时间:2023-10-06 12:44:40浏览次数:35  
标签:Java age per 传递 Person per1 引用 change

引用传递分析

类本身就属于引用数据类型,既然是引用数据类型,就会牵扯到内存的引用传递。

引用传递的本质:同一块堆内存空间可以被不同的栈内存所指向,也可以变更指向。

引用传递案例

先看一个应用传递的例子:

class Person{
	String name;
    int age;
    public void tell(){
        System.out.println("姓名:"+ name + " 年龄:" + age);
    }
}
public class JavaDemo{
    public static void main(String args[]){
        Person per1 = new Person(); //实例化
        per1.name = "张三";
        per1.age = 18;
        Person per2 = per1; //引用传递
        per2.age = 80;
        per1.tell();	//进行方法调用
    }
}

运行结果:

对代码进行分析:

首先是实例化对象per1以及赋值,这个较好理解

关键的一条语句:Person per2 = per1; 因为我们知道,per1实际上保存的一条内存地址,而上述语句怎表明新的栈内存空间per2per1保存一样的内存地址。

当我执行语句per2.age = 80;的时候,实际上修改原本控件的age值

方法进行引用传递

这个时候的引用传递是直接在主方法进行的,也可以使用方法进行引用传递。

沿用上面例子我们做个修改:

class Person{
	String name;
    int age;
    public void tell(){
        System.out.println("姓名:"+ name + " 年龄:" + age);
    }
}
public class JavaDemo{
    public static void main(String args[]){
        Person per = new Person(); //实例化
        per.name = "张三";
        per.age = 18;
        change(per);
        per1.tell();	//进行方法调用
    }
    public static void change(Person temp)
        temp.age = 80;
}

与之前的差别最大的地方在于,此处程序是将Person类的实例化对象(内存地址和数值)传递到方法change()方法中。

但是大家不要被迷惑了,此时运行结果还是和上述一样。这是因为change(per);就等价于Person temp = per;

从图上来说,实例化部分的图是一样的,而到change(per);部分,如下图

此时原本栈内存都是主方法的per1per2,现在变成了主方法的perchange()方法的temp

最后执行change()

但是当change()执行完毕是,temp会断开连接

最后,当我们引用传递发生在方法上,主要关注方法接收的参数类型方法的执行位置

标签:Java,age,per,传递,Person,per1,引用,change
From: https://www.cnblogs.com/meloo/p/17744442.html

相关文章

  • Java项目汇总列表
    提供:项目源码、项目文档、数据库脚本、软件工具等所有资料从零开始手把手教学部署运行本系统该项目附带的源码资料可作为毕设使用提供技术答疑和远程协助指导,帮助调试并解决后期项目运行问题,文章底部获取博主联系方式序号项目名称站内地址B站地址1基于JavaWeb学生成绩信息管理......
  • 深入探讨Java Stream流:数据处理的新思维
    文章目录1.流式思想1.1输入流与输出流1.2Stream流2.使用Stream流的步骤3.获取Stream流3.1容器3.2数组4.Stream流中间操作方法4.1`filter(Predicate<?superT>predicate)`4.2`limit(longmaxSize)`4.3`skip(longn)`4.4`distinct()`4.5`sorted()`和`sorted(Compar......
  • HTML+JavaScript+CSS DIY 分隔条splitter
    一、需求分析现在电脑的屏幕越来越大,为了利用好宽屏,我们在设计系统UI时喜欢在左侧放个菜单或选项面板,在右边显示与菜单或选项对应的内容,两者之间用分隔条splitter来间隔,并可以通过拖动分隔条splitter来动态调研左右两边的宽度。要在网页上实现这种UI界面,也有不少现成的组件,比如jQue......
  • 基于Java+SpringBoot+Vue的微信小程序实现民族节日及民间故事推广系统
    一、前言......
  • JavaWeb(一)
    1、CS和BSCS:客户端服务端架构模式BS:浏览器服务器架构模式2、B/S结构的系统通信原理2、Tomcat(Web服务器)==注意:Tomcat要运行,必须要有jre(Java的运行环境)。即需要配置JAVA_HOME和PATH变量以及CATALINA_HOME和PATH变量==3、Servlet3.1、webapp的开发团队和Webserver的开发团......
  • Java---多态
    1.多态的概念1.1概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。2.多态的定义及实现2.1多态的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。那么在继承中要构成多态还有两个条件:必......
  • java 中都有哪些引用类型?
    1)强引用Java中默认声明的就是强引用,比如:Objectobj=newObject();obj=null;只要强引用存在,垃圾回收器将永远不会回收被引用的对象。如果想被回收,可以将对象置为null;(2)软引用(SoftReference)在内存足够的时候,软引用不会被回收,只有在内存不足时,系统才会回收软引用对象,如果......
  • Java---继承
    继承的概念继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。需要注意的是,子类无法继承父类私有的对象和方法生活中的继承 ......
  • java面向对象
    一面向对象和面向过程面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分面向过程(算法+数据结构=程序)规模比较小的问题,分解为过程的开发方式比较理想面向功能划分软件结构以方法为单位面向对象(数据在第一位,再考虑......
  • MyBatis参数传递和接受(@Param)
    一、@Param注解传递多个普通类型参数在接收端便可使用#{别名}的方式接收参数。 简单地说,在接口文件中使用org.apache.ibatis.annotations.Param类型的注解@Param为参数定义别名;在映射文件中使用#{别名}获取参数。 在此,我们以查询为例讲解利用@Param注解传递和接收多个普通......