变量与常量的本质区别

量,不管是变量还是常量,都携带了两个信息。

一个是这个量的逻辑地址,逻辑地址和内存中的物理存储地址是映射好的(由内存管理单元MMU完成映射),因此通过逻辑地址就可以知道这个量在物理内存中的起始位置。

另一个则是根据这个量的类型的信息,在内存中申请的bit数量。

对于基本数据类型,某个量这些bit是彼此相邻的,引用类型的bit也是彼此相邻的。为何?因为内存是按照8bit来划分最小存储单元的。

而利用类模板创建的实例(对象)——这种对各种基本数据类型的庞大组合体,虽然很复杂,也应该是连续分配bit来存储的。只不过它引用的其它实例存储在其它地方。

事实上,赋值取值就是对某个量,从实际的物理地址起始处开始对这个量所对应的那些bit状态的操作。

修改部分或者全部的bit的状态等同于给这个量赋值。

获取bit的状态等同于取值。

因为计算机计算的本质就是bit的状态转换、传输与获取。

再来看看在语法上如何表现:

赋值表达式语句里,某个量在赋值符号 【=】两边的含义大不相同:

这个量在【=】左边,就是修改这个量在内存中所对应的各个bit,称为赋值,
能赋值,就称这个量是变量,可写;不能赋值,则称这个量是常量,不可写。因而,是否可写就是变量与常量的本质区别。

这个量在【=】右边,则是获得这个量在内存中那些bit状态,可获取,就叫做可读;不能获取,叫做不可读。变量与常量在程序中,在合适的地方访问,都是可读的。

完全理解上述以后,相信对以下这些将不难理解:

java里的final关键字的的意义就是声明不可修改的东西,量不可赋值,方法不可重写,类不可被继承。

函数里的传参只是另外一种赋值方式,而且语法规定的是对形参进行赋值,可想而知形参必定是变量(如果它想接收参数)。

而函数接收的实参可以是字面值、常量和变量。到真正调用函数的时候,首先就要干这些事:

1)判断实参是哪一种。

2)实参是字面量,则把形参修改为这个字面量对应的一连串的bit状态,完成赋值。

2)实参是常量或者变量,不管这个量是基本数据类型的还是引用类型的,取得这个量的后一个属性(一连串的bit状态),把这一串的bit的状态,传输至形参的物理地址处,完成形参状态修改。

3)如果是引用类型的变量或常量,那传递的这些bit的含义,就是某个实例的起始地址。这样的结果是,实参和形参都具有某个实例的起始地址,因而通过实参和形参都可以找到同一个实例。

可以看出,实参和形参并不相干,意思就是对形参赋值不影响实参,对实参的赋值(此处假设实参是变量)也不影响形参。为何?

因为实参和形参本来就存储在内存中不同的地方,井水不犯河水。

至于引用类型的参数传递表面看起来会相互影响,但实际上却并不相互影响。为何?

实参和形参存储的信息,表示它们都可以操作内存中同一块区域,但这是那个实例存在被共享的问题,实参和形参存储的内容,并不会因为存放实例的那块内存区域被改变而变化理解了吗

变量与常量的本质区别,以及由此引出的深入思考(纯文字解释,不附图,图像自己在大脑中构建)相关推荐

  1. 里面怎么定义变量_小哥今天要给朋友们分享一下Java编程语言中的变量与常量的区别...

    喽,各位朋友们大家好! 我是90小哥爱数码,很高兴今天又能和大家在这里见面了. 那么在最近的这段时间里面呢,小哥连续为朋友们介绍了Java计算机编程语言中几个比较重要的知识点.其中包括了Java编程语 ...

  2. PHP 零基础入门笔记(3):PHP 变量和常量

    PHP 变量和常量 PHP 基本语法 PHP 是一种运行在服务器端的脚本语言,可以嵌入到 HTML 中 1.PHP 代码标记 ASP 标记(asp_tags,已弃用) <% php代码 %> ...

  3. 人,与动物的本质区别,在哲学里说是制造和使用工具

    人之所以称之为人,与动物的本质区别,在哲学里说是制造和使用工具,并在此劳动过程中产生了人类特有的意识.这个有些泛,我根据制造使用工具,进一步将人与动物的本质区别划分为一下两点具体体现: (1)人类的进 ...

  4. python定义符号常量_python注释、变量、常量的学习

    注释.变量.常量的学习 注释 什么是注释 注释是对代码的解释,方便后期的阅读代码,可以使在后期的代码维护中事半功倍. 注释的作用 注释可以用来排查代码中的BUG,在一段有BUG的代码当中,用注释选中其 ...

  5. php的常量和变量的区别,变量和常量的区别_在php当中常量和变量的区别

    摘要 腾兴网为您分享:在php当中常量和变量的区别,云集,悦读小说,游戏堂,手机管家等软件知识,以及glu金币,qq自动登录器,刷火车票软件,viber网络电话,e社保,角度测量软件,炒股手训练软件, ...

  6. java变量与常量的区别_Java变量与常量

    Java变量与常量 常量 常量是指在程序执行过程中始终保持不变的量. 定义语法 final 常量数据类型 常量名=常量初始值: 常量的分类:静态常量.成员常量和局部常量. public class d ...

  7. equals方法变量和常量位置区别

    对于字符串比较,我的习惯用法是 变量.equals(常量) 比如: a.equals("a") 今天看视频才知道变量在前面与后面有很大影响,正确的写法是常量放前面(可以避免变量为n ...

  8. 符号常量和变量有什么区别_“变量”和“常量”,计算机程序中的那个“量”是什么“量”...

    石头这个学期上了一门大一的"C语言"课程,这是石头第二次上这门课了,我决定把这门课中学生比较容易混淆的.不好理解的概念用文章的形式记录下来. 无论是什么量,最终归为0 1 01 变 ...

  9. java中常量和变量的区别_Java语言基础 变量和常量

    变量和常量 1.变量的有效范围(作用域) (1)在类体中定义的变量被称为成员变量,成员变量在整个类中都有效.类的成员变量分为静态变量和实例变量,静态变量通过修饰符static确定,并且可以通过&quo ...

最新文章

  1. react antd form 表单清空
  2. iptables 防火墙设置
  3. ‘wmic‘ 不是内部或外部命令,也不是可运行的程序 解决方法
  4. Matplotlib实例教程 | 配色表 colors
  5. win10优化开机进程
  6. srve0255e尚未定义要怎么办_皮肤干燥怎么办?四大方法帮你冬季补?
  7. Excel.Application 和 打印机 :)
  8. cilium插件测试_Cilium网络概述
  9. C# 视频监控系列(12):H264播放器——播放录像文件
  10. matlab绘制三角函数乘除法的问题
  11. 遥感导论(梅安新版)知识点概括
  12. 各种计算机绘图的应用场合,cad制图员面试技巧
  13. 台式计算机怎样能搜无线连接,台式电脑如何连接无线网络
  14. 如何使用Python将Word转换为PDF文件?
  15. 解码jpg图片c语言,图像解码之一——使用libjpeg解码jpeg图片
  16. cubieboard服务器系统,Cubieboard 1搭建服务器安装Linux/Debian系统并移至内置Nand中
  17. JavaBase 求 个位,十位,百位,千位
  18. 【机器人学】牛顿-欧拉动力学方程迭代形式
  19. 天翼光猫虚拟服务器怎么设置,电信光猫设置经验图解手把手教你(超级详细),换光猫怎么重新设置...
  20. fedora 27字体美化达到ubuntu级别

热门文章

  1. Python学习之生成动态二维码
  2. 【Python从零到壹】Python的变量
  3. windows下git客户端的下载安装及使用教程
  4. java实现发邮件qq邮箱,Java实现利用QQ邮箱发送邮件
  5. jupyter notebook报错_Docker进入jupyter-notebook容器修改密码报错。
  6. 3Dmax人物建模入门教程教学- 头部制作
  7. 【警告】chunk base [mini-css-extract-plugin] Conflicting order between:
  8. CiteSpace安装使用简介
  9. 怎么找回苹果cms后台管理员密码
  10. 2022甘肃最新食品安全管理员模拟考试试题及答案