Java学习日记10——Java中的变量及其传递

2023-11-06

Java学习日记10——变量及其传递、引用类型和基本类型变量的传递区别

 变量的定义在前面已经讲解过了:点击这里 可以查看原文。这里的分类会略微不通过与之前。这里的变量主要分为字段变量和局部变量。

 1.在存储角度来看:
 字段变量是对象的一部分,存放于堆之中,然后局部变量是存放在栈中间的。
 2.在生命周期角度来看:
 字段变量的生命周期是随着类的存在而存在,但是局部变量仅仅是在方法调用的时候存在。而且在方法中的局部变量是必须要初始化定义的,而不像字段变量一样可以自动分配。
 3.在语法角度来看:
 字段变量属于类,可以用pubic和private、static、final等修饰,局部变量不能被访问控制符和static修饰,可以被final修饰。

调用方法时——变量的传递
 由于Java中变量的类型不同,所以各方法之间的参数传递效果会不一致。基本参数类型的值是直接存在变量中的,是复制性传递,也就是相同的变量名会存在于不同的内存区,调用的结果会不同,所以将这个方法的值复制到另一个方法进行改变时,当前方法的值不会改变(相当于是多个同名变量,只在自己的方法体生效)。而引用类型的数据是存放在内存空间中,其引用的实体对象(用new方法创建的)也会占据一定空间,如果在其他方法对值进行修改,会导致最终值的改变。
 具体见下面的例子:其中int整数类型是基本数据类型,而数组int[ ]是引用类型的变量。
程序不麻烦,简单易懂,不要怕!

public class variable {

	static void modify(int a) {
		a++;
		System.out.println("在modify方法中的a已经变为:"+a);
	}
	static void modify(int []b) {
		b[0]++;
		System.out.println("在modify方法中的b[0]已经变为:"+b[0]);
	}
	public static void main(String []args) {
		int a = 0;
		System.out.println("初始化的a为:"+a);
		modify(a);
		System.out.println("经过其他方法修改的主函数a为:"+a);

		int []b = new int[1];
		System.out.println("初始化的b[0]为:"+a);
		modify(b);
		System.out.println("经过其他方法修改的主函数b[0]为:"+b[0]);
	}
}

程序的运行结果为:

初始化的a为:0
在modify方法中的a已经变为:1
经过其他方法修改的主函数a为:0
初始化的b[0]为:0
在modify方法中的b[0]已经变为:1
经过其他方法修改的主函数b[0]为:1

注意: 如果你直接将a定义在类中的话,也就是相当于将a作为variable类的一部分,也将会占用一定的内存空间,因为类是引用类型数据,这样就是相当于作为引用类型——类的一部分,也将伴随着类的实体对象产生(new)而产生相应的产生。那就可以理解为引用类型,也会随着方法体的修改而改变。

引用类型数据的传递注意事项

 引用类型例如类的实体,建立(new)一个类的实体d,然后利用赋值符号赋值给另一个实体对象dd,如果只是单纯的利用赋值符号传递,那么最终的效果是d和dd实际操作的是同一个对象内存空间。也就是说,不经过new的赋值,只是将d的引用传递给dd,并不会生成新的实体对象。
举一个例子:

package learning4;

public class dataconvert {
	private int year;
	private int mouth;
	private int day;
	void yearadd() {
		year ++;
	}
	void setdata(int year,int mouth,int day){
		this.day = day;
		this.mouth = mouth;
		this.year = year;
	}
	void dispaly() {
		System.out.println(year+"年"+mouth+"月"+day+"日");
	}
	
	public static void main(String [] args) {
		dataconvert d = new dataconvert();
		dataconvert dd = d;//让dd直接等于d,这样的操作其实并没有重新分配内存
		//dd和d操作的都是同一个内存数据
		d.setdata(2020, 8,1);//用d进行赋值
		dd.setdata(2019, 11, 11);//用dd进行赋值,由于实际操作的都是一个内存,所以最终结果会以2019.11.11为最终赋值参数
		d.dispaly();
		d.yearadd();
		d.dispaly();
		dd.dispaly();
	}
}

程序的执行结果如下:

201911112020111120201111

通过观察运行的结果,可以看出,只要不是用new分配的空间,就不算建立新的对象,像这样直接用等号的,即使设置再多个对象,也操作的是同一个对象空间。

如果你对Java有兴趣,可以了解一下前面几期的基础知识!下面附上链接:

Java编程基础认知:Java学习日记1——基础认知
Java面向对象编程认识:Java学习日记2——面向对象编程认知
Java程序的基本结构认识:Java学习日记3——程序类型与构成认知
Java的输入输出方法总结:Java学习日记4——Java输入输出方法总结
Java的数据类型、变量、常量、运算符:Java学习日记5——数据类型、变量、常量、运算符、数组
Java学习日记6——类、字段、方法、this的使用:Java学习日记6——类、字段、方法、this的使用
Java学习日记7——类的继承、super使用规则:Java学习日记7——类的继承、super使用规则
Java学习日记8——public、static、private、final、abstract、protected修饰符:Java学习日记8——public、static、private、final、abstract、protected修饰符
Java学习日记9——接口(长文预警):Java学习日记9——接口(长文预警)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java学习日记10——Java中的变量及其传递 的相关文章

随机推荐

  • ImportError: /home/yukang/anaconda3/envs/fsgan/lib/python3.9/site-packages/torch/lib/libtorch_cuda_c

    ImportError home yukang anaconda3 envs fsgan lib python3 9 site packages torch lib libtorch cuda cpp so undefined symbol
  • 解决Anaconda安装后出现Conda environment has not been activated.问题

    问题描述 Win10安装完成Anaconda3 2021 11 Windows x86 64 exe 且手动配置好环境变量后 出现conda未激活现象 cmd控制台输入 C Users Queena gt python Python 3 9
  • Qt使用QGraphicsView实现滑动窗体效果

    源码已上传至CSDN http download csdn net source 2808505 QGraphicsView用来显示一个滚动视图区的QGraphicsScene内容 QGraphicsScene提供了QGraphicsIte
  • 利用公交刷卡数据分析北京职住关系和通勤出行

    01 文章信息 利用公交刷卡数据分析北京职住关系和通勤出行 本篇文章于2021年10月15日发表于 地理学报 02 摘要 基于位置服务 Location Based Service LBS 技术为研究城市系统的时空动态规律提供 了新的视角
  • c++中的常用知识点总结

    命名空间 使用命名空间之后 调用代码时可以省去也可以不省去相关的前缀 include
  • CSS语法与CSS选择器

    目录 CSS 语法 实例 例子解释 CSS 选择器 CSS 元素选择器 实例 CSS id 选择器 实例 CSS 类选择器 实例 实例 实例 CSS 通用选择器 实例 CSS 分组选择器 实例 所有简单的 CSS 选择器 延伸阅读 CSS
  • 宝塔后渗透-添加用户_反弹shell

    更新时间 2022年11月21日 1 背景介绍 对于想拿到bt后台来说 非常的艰难 无非是通过bypass之后提权 直接拿到服务器的root权限 然后再去宝塔后台 当然 还有一种运气十分爆棚的方法 发现了bt的账密信息 可以直接登陆了bt后
  • 电磁兼容RE典型整改案例分析

    1 可视对讲门铃EMI解决方案 客户介绍 珠海某电子科技有限公司是一家专门从事智能家居和楼宇对讲生产 研发 销售为一体的科技型企业 经客户转介绍认识 因其有一个新研发的高端出口可视对讲系统在深圳宝安某检测公司进行空间 RE 辐射测试EN55
  • LVGL8学习之Flex布局2

    这一篇来学习Flex布局的把项目按行包裹 且让他们周围的控件平均 Arrange items in rows with wrap and even spacing 还是通过codeblock来模拟代码的运行 代码如下 void lv fle
  • vue高级特性

    Vue是一款流行的JavaScript框架 它可以帮助我们构建高效 可维护的Web应用程序 本篇文章中 我将给大家分享三个Vue的高级技术 并且详细地讲解它们的实现原理 动态组件 动态组件是Vue中非常有用的一项功能 它允许我们在不同的组件
  • 07:STM32----ADC模数转化器

    目录 1 简历 2 逐次逼近型ADC 3 ADC基本结构 4 输入通道 5 规则组的4种转换模式 1 单次转化 非扫描模式 2 连续转化 非扫描模式 3 单次转化 扫描模式 4 单次转化 扫描模式 6 触发控制 7 数据对齐 8 转化时间
  • Unity面试题:热更新篇

    请简要介绍Unity热更新的原理和实现方式 答 Unity热更新的原理是通过将游戏的资源和代码分离 将代码部分放置在服务器端 游戏启动时通过网络下载更新的代码并动态加载 以达到实现热更新的目的 实现方式包括AssetBundle ILRun
  • 查看是否有主键_详解MySQL数据库主键信息及无主键表

    概述 总结一下MySQL数据库查看无主键表的一些sql 一起来看看吧 1 查看表主键信息 查看表主键信息 SELECT t TABLE NAME t CONSTRAINT TYPE c COLUMN NAME c ORDINAL POSIT
  • 弱网测试出现的问题解决思路

    摘自弱网测试时碰到的问题和解决方案再加上自己的一些遇到的解决 1 没进入到后台 可以在前端请求开始时候加个定时器 在请求完毕 或者一定时间 删除定时器 2 现象 用户登录应用时下载初始化数据 下载过程中因网速太慢点击取消并重新登录 数据初始
  • Pytorch 基础之张量索引

    本次将介绍一下 Tensor 张量常用的索引与切片的方法 1 index 索引 index 索引值表示相应维度值的对应索引 a torch rand 4 3 28 28 print a 0 shape 返回维度一的第 0 索引 tensor
  • jfinal-admin 后台框架永久开源

    jfinal admin 是什么 jfinal admin是一个基于jfinal的后台管理开发框架 能帮助你使用很少的时间和代码量开发出功能完备的管理后台 最新代码请切换到 develop 分支 集组织机构管理 用户管理 角色管理 菜单管理
  • C语言【判断一个整数是否为素数】

    include
  • U-Boot命令大全(功能参数及用法)

    本文转载至 http www cnblogs com farsight2011 p 3301126 html U Boot上电启动后 按任意键可以退出自动启动状态 进入命令行 U Boot 2010 03 Sep 25 2011 16 18
  • NZ系列工具NZ02:VBA读取PDF使用说明

    分享成果 随喜正能量 时光绽放并蒂莲 更是一份殷殷嘱托 更是一份诚挚祝福 是一份时光馈赠 又是一份时光陪伴 我的教程一共九套及VBA汉英手册一部 分为初级 中级 高级三大部分 是对VBA的系统讲解 从简单的入门 到数据库 到字典 到高级的网
  • Java学习日记10——Java中的变量及其传递

    Java学习日记10 变量及其传递 引用类型和基本类型变量的传递区别 变量的定义在前面已经讲解过了 点击这里 可以查看原文 这里的分类会略微不通过与之前 这里的变量主要分为字段变量和局部变量 1 在存储角度来看 字段变量是对象的一部分 存放