这是我参与11月更文挑战的第 12 天,活动详情查看:2021最后一次更文挑战
变量的概述
变量是内存中存储数据最基本的单元,将数据放到内存当中,给这块内存空间起个名字,这就是变量。
所以变量就是内存当中的一块空间,这块空间有名字、有类型、有值,这也是变量必须具备的三要素。
变量要求“变量的数据类型”和变量中存储的“数据”必须是一致的,换句话说,冰箱是用来存放小食品的,所以大象不能往里面放,原因是放不下,空间不合适。例如:int 类型就只能存放4个字节大小的整数,再长一点儿就放不下,比如long 类型的整数占有8个字节,它是肯定无法放到int 类型的变量当中的。
所谓变量:可变化的量。它的意思是变量中存储的数据不是一成不变的,是可以被改变的,假设变量i 之前存放的数据是1,我们可以将其变成10,变量就是这个意思。总的来说,一个变量是有三要素组成的,分别是:数据类型、变量名、存储的值。
变量的使用
我们在使用变量之前需要先进行变量的声明。下面这段代码表示声明一个int 类型的变量age 用来存储年龄数据:
1 | csharp复制代码public class VarTest01{ |
我们可以看到上面的代码中这个age 变量的三要素当中只具备了两个要素:数据类型和变量名,此时的age 变量并没有存储数据(没有赋值),显然这个age 变量不能被访问。也就是说age 变量中还没有数据,空间还没有开辟出来,由此可见,java 语言中的变量要求必须先声明,在赋值才能被访问。
变量使用的几个注意点
- 1,“=”叫做赋值运算符,赋值运算符右边的表达式优先级较高,所以等号右边先执行,将执行结果赋给左边的变量。
- 2,在进行赋值运算的时候,Java 中规定“值”的数据类型必须和“变量”的数据类型保持一致,也就是说int 类型的变量只能存储int 类型的数据,不能存储其他类型的数据。
- 3,允许一次声明多个同类型的变量
1 | ini复制代码int a=200,b=200,c=400; |
- 4,同一个域中变量名不能重名,但变量是可以重新赋值的。
变量的分类
变量根据声明位置的不同可以分为:局部变量和成员变量
数据类型概述
在学习数据类型之前我们先来思考一个问题,数据类型在程序中起什么作用呢?
实际上软件主要是对数据进行处理,现实生活中的数据有很多,所以编程语言对其进行了分类,然后就产生了数据类型,不同数据类型的数据会给其分配不同大小的空间进行存储。也就是说,数据类型作用就是决定程序运行阶段给变量分配多大的内存空间。
java 中的数据类型包括两大类,一类是基本数据类型,另一类是引用数据类型。其中,基本数据类型又包括以下 4 类 8 种:
- 第1类:整数型(不带小数的数字):byte, short, int, long
- 第2类:浮点型(带小数的数字):float,double
- 第3类:字符型(文字,单个字符):char
- 第4类:布尔型(真和假):boolean
我们也可以注意到,在以上基本数据类型中并没有字符串类型(带双引号的是字符串),这是因为,Java 中字符串属于引用数据类型,不属于基本数据类型的范畴。接下来我们看一看八种基本数据类型的详细信息:
数据类型 | 占字节数 | 缺省默认值 |
---|---|---|
byte | 1 | 0 |
short | 2 | 0 |
int | 4 | 0 |
long | 8 | 0L |
float | 4 | 0.0f |
double | 8 | 0.0 |
boolean | 1 | false |
char | 2 | ‘\u0000’ |
通过上表我们也可以注意到不同数据类型所占的字节数并不相同,那字节又是什么呢?1个字节就是8个比特位。那 1 个比特位又是什么呢?1 个比特位就是一个1或者0,或者说一个比特位就是一个二进制。也就是说1个字节是由8个1和0组成的二进制数字串。
有了这些基本的认知,接下来我们看看数据类型的详解!
数据类型详解
1,字符型详解
字符型char 在Java 语言中占用2个字节,char 类型的字面量必须用半角的单引号括起来,同时也要了解char 和short 虽都占用2个字节,但是char 可以取到更大的正整数,因为char 类型没有负数。
代码示例:
1 | csharp复制代码public class CharTest{ |
对于以上的程序,’\t’表面上看是由两个字符构成,但程序能够正常运行的原因是****具有转义功能。下面看几个常见的转义字符的含义:
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\n | 换行,将当前位置移到下一行开头 | 010 |
\r | 回车,将当前位置移到本行开头 | 013 |
\t | 水平制表符(跳到下一个TAB位置 | 009 |
\ | 代表一个反斜线字符’’ | 092 |
‘ | 代表一个单引号字符 | 039 |
“ | 代表一个双引号字符 | 034 |
2,整数型详解
整数类型在Java中有4种表示方式,分别是十进制、八进制、十六进制、二进制。默认为十进制,以0开始
表示八进制,以 0x 开始表示十六进制,以 0b 开始表示二进制。
通过一段代码进一步理解:
1 | csharp复制代码public class InterTypeTest{ |
通过上面的测试,我们可以得出如下一个数据赋值给一个变量的时候存在三种不同的情况:
- 1,类型一致,不存在类型转换
- 2,小容量可以自动赋值给大容量,称为自动类型转换
- 3,大容量不能直接赋值给小容量,如果一定要赋值给小容量的话,必须添加强制类型转换符进行强制类型转换操作。
3,布尔型详解
在Java语言中布尔类型的值只包括 true 和 flase,没有其他值,不包括 0 和 1。布尔类型的数据在开发中主要用在逻辑判断方面。
接下来可以自行运行下面的一段代码,来看看布尔类型变量的值是否可以使用1 和 0:
1 | typescript复制代码public class InterTypeTest{ |
通过这个测试,我们就可以切身体会到,在Java中布尔类型的变量值不能使用1 和 0,只能使用 true 和 false。
4,浮点型详解
浮点型数据实际上在内存中存储的时候大部分情况下都是存储了数据的近似值,为什么呢?因为数据是无穷的,但内存是有限的,所以只能存储近似值,float单精度占4个字节,double双精度占8个字节,相对来说double 精度高一些。
同时Java 语言中有这样一条规定:只要是浮点型的字面量,例如 1.0/3.14 等都会默认当做double类型来处理,如果想要程序将其当做 float 类型处理,需要在字面量后面添加 f/F 。
5,基本数据类型转换
基本数据类型之间是存在固定的转换规则的,下面总结了6条基本规则,可在平时的应用中进行套用:
- 1, 8种数据类型除了boolean 类型不能转换,剩下的都可以进行转换;
- 2,如果整数型字面量没有超出 byte,short,char,的取值范围,可以将其赋值给byte,short,char类型的变量;
- 3,小容量可以向大容量自动转换。容量从小到大排序为:byte<short(char)<int <long<float<double,其中short 和 char都占用两个字节,但是char 可以表示更大的正整数;
- 4,大容量转换成小容量,称为强制类型转换,编写是必须添加“强制类型转换符”,但是运行时可能出现精度损失,谨慎使用;
- 5,byte,short,char类型混合运算时,先各自转换成int 类型在做运算;
- 6,多种数据类型混合运算时,各自先转换成容量最大的那一种再做运算。
本文转载自: 掘金