对于一些基本的概念不做赘述
数据类型
基本数据类型
四类八种
整型
关键字 | 书籍类型 | 内存占用 | 取值范围 |
---|---|---|---|
byte | 字节型 | 1 | -128 ~ 127 |
short | 短整型 | 2 | -32768 ~ 32767 |
int | 整型 | 4 | -2 ^ 31 ~ 2 ^ 31 -1 |
long | 长整型 | 8 | -2 ^ 63 ~ 2 ^ 63 -1 |
浮点型
类型 | 名字 | 所占字节 |
---|---|---|
float | 单精度浮点型 | 4 |
double | 双精度浮点型 | 8 |
字符型
类型 | 名字 | 所占字节 |
---|---|---|
char | 字符型 | 2 |
布尔型
类型 | 名字 | 所占字节 |
---|---|---|
boolean | 布尔型 | java 虚拟机未明确规定其大小 |
和c语言的一些区别
- c 中 char占 1 byte
- java 中没有 long long 类型
- java 比 c 多了 byte 类型 , boolean 类型
- 在c中,不同位操作系统下一些基本数据类型所占内存会改变。但在Java中无论什么环境下所占内存都不会改变。因为Java是在虚拟机环境下运行的。
- java中是没有无符号数这个概念的。都是有符号数。
byte
byte可以存放一定范围的数字,以及一些字符。字符在输出台打印的结果是数字(ASCII表,每个字符对应了一个数字)。所以本质上,byte只能存放-128到127范围的数字。
超过byte的存放范围。编译器便会自动报错。
由此想到,c语言中超过范围,只会报警告。由此可以体现java的安全性。
int
类似byte,存放的数据范围比byte大,存放字符时,存的是字符的ASCII值。输出也是字符的ASCII值。
short
类似byte,不做赘述。
long
用法和上面类似。为了区别int和long类型,long类型的变量初始化的时候建议加上L或者L的小写。
为什么byte,short不要加什么B或者S来区分呢。
首先我们要明白一件事儿,在java中整数字面常量是默认是int型,浮点数默认是double型。
byte,short存放数据的范围都比int小。那么定义byte,short变量的时候,java会先判断是否在其存储范围里面,在的话就会自动进行转型。
但是long的类型存储数据范围比int大,当定义long变量的时,数据在int范围里面的时候是可以不加L区分的,但是当数据超过int范围的时候,这个时候不加L告诉编译器这个数据是long类型的话,编译器就会报错。
double
浮点数的字面常量默认是double类型。表示的数据精确度范围较大,一般在工程上用到浮点数优先考虑用double类型
浮点数与整数在内存中存储的方式都不同,不能单纯的按照2^n的形式来计算
浮点数是个近似值,并不是精确值。
float
为了区分float喝double类型,float类型的变量初始化的时候必须加上** f或F **。否则会报错。
float的精度较小。
char
1.char可以存放字符,可以存放整形(但输出时是这个数字对应的字符),可以存放汉字。
2.java中使用单引号 + 单个字母的形式来表示字符字面值。
3.计算机中的字符本质上是一个整数。在编码规则下,每一个字符都对应了一个整数。在c语言中使用的是ASCII编码规则,只能表示255个字符,而在java中使用的是Unicode编码规则来表示字符。ASCII码包含于Unicode。Unicode表示的字符更多。所以一个字符占用两个字节。
输出汉字字符的时候,有可能会出现乱码。
如果是用命令行来运行java,就在执行javac的时候加上-encoding UTF-8就可以了
javac -encoding UTF-8 Test.java
如果是用IDEA软件就把编码规则改成UTF-8就可以了
boolean
1.boolean只有两个取值true或者false
2.在c中,非0为真,0为假,但在java中,真就是true,假就是false,不存在什么非0表示true,0表示false。
3.java虚拟机规范中没有明确规定boolean占多少字节,也没有专门来处理boolean的字节码指令,不同公司虚拟机实现中,boolean占的内存大小可能不一样。
类型转换
java是一个强类型编程语言,当不同类型的变量相互赋值的时候会有较为严格的检验。
自动类型转换(隐式)
代码不需要进行任何处理,在代码编译的时候,编译器会自动进行类型转换。
一般来说,数据范围小的转化为数据范围大的时会自动进行。
强制类型转换 (显式)
代码需要手动进行一定得处理
一般来说,数据范围大的到数据范围小的要进行强制类型转换。
float a = 11.1;
int b = (int)a;
特别的:
boolean和任何类型都不能进行类型转换。
类型提升
1.不同类型的数据之间进行运算的时候,范围小的会被提升到范围大的。
2.比4字节小的类型进行运算,无论是不是混合运算都会先提升到4个字节再进行运算。
引用数据类型
除开基本数据类型,就是引用数据类型。
每个基本数据类型都对应着一个大类,叫包装类。包装类属于引用数据类型。
基本数据类型 | 包装类 |
---|---|
byte | Byte |
char | Character |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
包装类里面有很多的功能可以使用。
字符串类型
字符串类型也属于引用类型
和c语言不同,创建字符串不需要使用数组。可以直接创建。
String s1 = "hello";