数据类型概述
在学习数据类型之前我们先来思考一个问题,数据类型在程序中起什么作用呢?
实际上软件主要是对数据进行处理,现实生活中的数据有很多,所以编程语言对其进行了分类,然后就产生了数据类型,不同数据类型的数据会给其分配不同大小的空间进行存储。也就是说,数据类型作用就是决定程序运行阶段给变量分配多大的内存空间。
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 类型没有负数。
代码示例:
public class CharTest{
public static void main(String[] args){
char c1='中';//char类型变量可以容纳一个汉字
char c2='t';
System.out.println("这是个普通的字符="+c2);
char c3='\t';
System.out.println("abc"+c3+"def");
}
}
//程序运行结果为
这是个普通的字符=t
abc def
对于以上的程序,'\t'表面上看是由两个字符构成,但程序能够正常运行的原因是****具有转义功能。下面看几个常见的转义字符的含义:
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\n | 换行,将当前位置移到下一行开头 | 010 |
\r | 回车,将当前位置移到本行开头 | 013 |
\t | 水平制表符(跳到下一个TAB位置 | 009 |
\ | 代表一个反斜线字符'' | 092 |
' | 代表一个单引号字符 | 039 |
" | 代表一个双引号字符 | 034 |
2,整数型详解
整数类型在Java中有4种表示方式,分别是十进制、八进制、十六进制、二进制。默认为十进制,以0开始 表示八进制,以 0x 开始表示十六进制,以 0b 开始表示二进制。
通过一段代码进一步理解:
public class InterTypeTest{
public static void main(String[] args){
int a=10;
long b=10L;
long c=10;
System.out.println(c);
int d=(int)c;//强制类型转化
System.out.println(d);
}
}
//代码运行结果为
10
10
通过上面的测试,我们可以得出如下一个数据赋值给一个变量的时候存在三种不同的情况:
-
1,类型一致,不存在类型转换 -
2,小容量可以自动赋值给大容量,称为自动类型转换 -
3,大容量不能直接赋值给小容量,如果一定要赋值给小容量的话,必须添加强制类型转换符进行强制类型转换操作。
3,布尔型详解
在Java语言中布尔类型的值只包括 true 和 flase,没有其他值,不包括 0 和 1。布尔类型的数据在开发中主要用在逻辑判断方面。
接下来可以自行运行下面的一段代码,来看看布尔类型变量的值是否可以使用1 和 0:
public class InterTypeTest{
public static void main(String[] args){
boolean flag=1;
boolean success=0;
}
}
通过这个测试,我们就可以切身体会到,在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,多种数据类型混合运算时,各自先转换成容量最大的那一种再做运算。
“不断总结,在总结中不断提高
”