任何一门高级语言在讲解语法的时候必会讲变量。仔细想一想是不是这样的呢?本文通过java代码进行讲解,如果看不懂java代码不影响的哈。都是很简单的java语句,看单词的意思就可以明白的那种。

我们怎么理解变量呢?或者说变量是什么呢?

我们可以这样理解:计算机的程序的运行的实质就是一系列的运算。我们可以简单的把这种运算理解成+ - * / 四则运算(描述不准确,但是我们可以这样理解)。

举个例子:

想一想我们在进行1230*235这个运算的时候我们人是怎么做的呢?我们是不是先找一张草稿纸,在上面写上1230 * 235 然后进行运算。计算机是人发明的所以肯定是让它以我们人类的方法来进行运算的。计算机在进行1230*235这个运算的时候做的第一件事情就是:找一张草稿纸。草稿纸代表什么?代表存储。我们在草稿纸上写1230*235的目的是存储1230 235这两个数。有的人可能会说我不用草稿纸就可以了啊 我可以心算啊。但是弟弟啊,你在进行心算的时候是不是知道自己在算什么呢?你为什么知道自己在算1230 * 235呢?还不是你的大脑此时充当了一张草稿纸把你这两个数存在了大脑里面?

所以:在计算之前我们需要做的事情就是先把需要运算的数字存储起来,那么我们存到哪里呢?我们存到我们的变量里面去。变量你可以理解成一个存储空间的名称。就像stack和heap一样就是一个对某一种存储空间的名称。

我们在写成代码的时候就应该这样写:

        int a = 1230;int b = 235;int mult = a * b;

可能有些弟弟会这样写:

       int mult = 1230 * 235;

这样写的话是不是以为我们没存储1230 和 235呢?我们还是存储了这两个数字的只不过是不存在我们自定义的变量中,而是存到另外一个存储区域去了。

上面的例子所讲的变量都是基本类型的变量。对于引用类型的变量理有一些不同,因为引用类型变量存储的并不是一个用来运算的值,而是一个地址。真正的用来运算的值存储在另外一个地方我们称之为堆(heap)。

我们来看一下这个例子:

        String s1 = new String("Lujipeng");String s2 = new String("Lujipeng");String s3 = s1;System.out.println("s1 == s2:"+(s1 == s2));  //falseSystem.out.println("s1 == s3:"+(s1 == s3));  //true

因为s1和s2变量存储的是地址,s1存储的第一个Lujipeng字符串的地址,s2存储的是第二个Lujipeng字符串的地址。所以s1 == s2 是false的。s3 == s1是true的。此时可能就会有弟弟说:我不喜欢这个结果,明明就是s1和s2都是Lujipeng为什么就不是相等的呢?真是让我无法接受啊。没事java开发者是很人性的,他们提供了equal方法让你自己来定义object(类类型变量)到底怎么样才是相等。所以我们可以直接override一下string类类型的equal方法就可以了。更加人性化的是java开发者已经给我们override了。我们看一下string类型中的equal方法:

作者:知乎用户
链接:https://www.zhihu.com/question/26872848/answer/34364603
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = count;if (n == anotherString.count) {char v1[] = value;char v2[] = anotherString.value;int i = offset;int j = anotherString.offset;while (n-- != 0) {if (v1[i++] != v2[j++])return false;}return true;}}return false;
}

所以:

        System.out.println(s1.equals(s2)); //true

但是我们要注意上面那个例子中string类型变量的初始化。因为string类型可以说是一个历史遗留问题,对我们string的初始化按照这种方式初始化的时候结果会不一样的哦:

        String s1 = "Lujipeng";String s2 = "Lujipeng";String s3 = s1;System.out.println("s1 == s2:"+(s1 == s2));//true 这里会变成true,因为按照上面的方法初始化的时候系统会先在堆中存储一个Lujipeng,然后让s1和s2指向这个Lujipeng。即使//你有s3 s4....sn如果按照上面这张方法初始化的话他们都是指向一个Lujipeng。System.out.println("s1 == s3:"+(s1 == s3));  //true

如果你被基本类型变量和引用类型变量的理解搞混了那么我就引用一下《c++ primer plus 5th》中的一句话吧:变量提供一个具名的,可供程序操作的存储空间。

变量构成

我们先来回想一下变量的定义。是不是一般都是这种类型:
        int i = 6;

int - 变量的数据类型;i - 变量名;6 - 变量存储的值。这三个可以称为一个变量必不可少的要素(你见过那个变量缺少过这三个要素吗?)。但是你可能会问为什么一个变量必须要有这几个要素呢?我们来探讨一下吧!

数据类型(Date Type)

数据(Date)是被分门别类了的,每类数据有不同的运算法则。

In computer science and computer programming, a data type or simply type is a classification of data which tells the compiler or interpreter how the programmer intends to use the data. Most programming languages support various types of data, for example: real, integer or Boolean. A data type provides a set of values from which an expression (i.e. variable, function ...) may take its values. The type defines the operations that can be done on the data, the meaning of the data, and the way values of that type can be stored.[1][2] 

                                                       Date Type--维基百科

如:1.234 是一个小数类型的数据值(value),1 是一个int类型的数据值(value),2147483648是一个long类型的数据值(value),Lujipeng 是一个string类型的数据值(value)。 1.234+1.1234 和 1+1 和 Lujipeng+Lujipeng虽然都是+运算但是运算的过程是天壤之别的。
所以数据不能被简单的存储到内存中就可以了,而是要对不同的数据区别对待。但是我们都知道不管你是小数还是整数在计算机中都是0101的二进制代码,那我们怎么知道我们存储的0101是int还是float呢?-------数据类型来注明。
所以我们要处理相应类型的数据必须通过相应类型的变量来存储这样计算机的运算才会达到我们预期的结果。string s1=“1”; string s2=“2” ;s1+s2是不会等于3的!!!!!

变量名

这个的存在就很显而易见了。变量名相当于一个接口,通过变量名来操纵一个存储空间(变量)。比如前面的int i = 6;这一条语句它进行了以下操作:
1.在栈中申请一个存储空间,这个申请到了的存储空间就是我们说的变量。并且给这个存储空间命名为a
2.a = 2,即通过a这个变量名来操纵存储空间,给变量名为a的存储空间存储一个数据2。

值(value)

变量是存储空间,变量中存储的东西就是值。

怎么理解变量(变量是什么)相关推荐

  1. 从缓存行出发理解volatile变量、伪共享False sharing、disruptor

    volatile关键字 当变量被某个线程A修改值之后,其它线程比如B若读取此变量的话,立刻可以看到原来线程A修改后的值 注:普通变量与volatile变量的区别是volatile的特殊规则保证了新值能 ...

  2. python中的常量可以修改吗_深入理解Python变量与常量

    变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.常量是一块只读的内存区域,常量一旦被初始化就不能被 ...

  3. 深入理解环境变量——以java环境变量配置为例

    目录 从自然环境到计算机环境 java环境变量配置 拓展:使用命令行打开应用 从自然环境到计算机环境 在自然生活中,环境指的是人类生存所依赖的空间,其中包含了生存必需的物质资源,比如空气.水资源等:将 ...

  4. 变量(什么是变量/变量的声明/命名的规范)

    这期我们来说一下JS的变量声明以及什么是变量 我们字面理解的变量也就是可以认为变化的值,确实也就是这样 更加确切的说: 变量是用于存放数据的容器,是程序在内存中申请的一块用来存放数据的空间 我们也通过 ...

  5. 【Groovy】Groovy 方法调用 ( 字符串切割 | 使用 Java 语法切割字符串 | 使用 Groovy 语法切割字符串直接为变量赋值 | 数组赋值给变量 变量个数小于等于数组长度 )

    文章目录 一.字符串切割 1.使用 Java 语法切割字符串 2.使用 Groovy 语法切割字符串直接为变量赋值 3.数组赋值给变量 变量个数小于等于数组长度 二.完整代码示例 一.字符串切割 在 ...

  6. java语言语法--- Java标识符(标识符命名规则)、Java关键字、Java变量(变量的声明、赋值、使用)和常量(字符常量、字面常量)(包括Java字节码文件反汇编命令javap)

    java语言语法- Java标识符.Java关键字.Java变量和常量(包括Java字节码文件反汇编命令javap) 1.标识符 (1)读音:biao zhi fu (2)什么是标识符? (摘自百度百 ...

  7. 环境变量 变量名 变量值_如何使用环境变量

    环境变量 变量名 变量值 Environment variables are a set of dynamic named values that can affect the way running ...

  8. shell--2--shell变量 定义变量 使用变量 只读变量 删除变量 变量类型 Shell字符串 shell函数

    Shell变量 @1变量即在程序运行过程中它的值是允许改变的量 @2变量是用一串固定的字符来表示不固定的值的一种方法 @3变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script ...

  9. Python技术分享:深入理解ThreadLocal变量的功能和使用

    我们在进行Python多线程开发的时候经常会使用到变量,但全局变量的变化影响到每一个线程,而局部变量使用起来又非常麻烦,所以我们需要使用到ThreadLocal变量,下面小千就来给大家介绍这个Thre ...

  10. 深入理解ThreadLocal变量的功能和使用

    我们在进行Python多线程开发的时候经常会使用到变量,但全局变量的变化影响到每一个线程,而局部变量使用起来又非常麻烦,所以我们需要使用到ThreadLocal变量,下面小千就来给大家介绍这个Thre ...

最新文章

  1. tensorflow tf.data.TextLineDataset()对象 (包含来自一个或多个文本文件的行的“数据集”) 不懂是啥玩意??
  2. 使用字符代替圆角尖角研究(转)
  3. OPENCV图像变换-1
  4. weblogic工具_WebLogic Classloader分析工具
  5. 文件指针创建失败!File *fp失败
  6. python做excel表格教程视频_基于Python实现excel表格读写
  7. vector 修改 java_java对vector动态数组中的对象排序,以下代码有何问题,如何修改?...
  8. 中国女排代言作业帮直播课,作业帮累计用户已超8亿
  9. 使用 EclEmma 进行覆盖测试
  10. Kaggle电影数据集:movies_metadata.csv
  11. 尔雅课堂 美学原理课后练习题库
  12. PADS 去除走线折角处提示和过孔提示
  13. 辛苦开发的 App 被山寨?阿里帮你为 APK 上把加固锁
  14. CISC和RISC的区别
  15. Android手机下载的缓存视频如何找到?
  16. 爬取美女图片实现翻页
  17. 简信CRM:超实用的CRM选型参考指南,拿走不谢!
  18. 299. 猜数字游戏 js实现
  19. linux遇到nul字符,linux TXT文件操作 '^@ ' 'NUL' 符号乱码问题
  20. Python爬取360手机助手评论——以百度地图为例

热门文章

  1. 手机页面html5 关闭窗口,JS关闭窗口或JS关闭页面的几种代码分享
  2. android照片备份软件下载,加密相册备份app下载
  3. python爬虫快速下载图片_Python爬虫入门:批量爬取网上图片的两种简单实现方式——基于urllib与requests...
  4. php查询二维数组中的值,如何在二维数组中查找一个指定的数值
  5. 解决‘chcp’不是内部或外部命令,也不是可运行的程序或批处理文件
  6. 市场经济还是市场政府?
  7. 安装Python模块之后仍显示未安装
  8. 什么运动耳机好用、骨传导运动耳机推荐
  9. Java自定义类数组的创建和使用
  10. gpu 虚拟服务器玩游戏,gpu云服务器玩游戏