JavaSe 基础 - 第四章 数据类型
程序员文章站
2022-04-09 10:45:29
JavaSe 基础 - 第四章 数据类型1、数据类型1.1、数据类型有什么用?1.2、数据类型在java语言中包括两种:1.3、8种基本数据类型中1.4、byte类型的取值范围?1.5、对于8种基本数据类型来说:2、8种数据类型2.1 字符型 char2.2 整数型 byte short int long2.3 浮点型:float double2.4 布尔型:boolean3、转换规则传送门1、数据类型1.1、数据类型有什么用?数据类型用来声明变量,程序在运行过程中根据不同的数据类型分配不同大小的空...
JavaSe 基础 - 第四章 数据类型
1、数据类型
1.1、数据类型有什么用?
数据类型用来声明变量,程序在运行过程中根据不同的数据类型分配不同大小的空间。
int i = 10;
double d = 1.23;
i变量和d变量类型不同,空间大小不同。
1.2、数据类型在java语言中包括2种
第一种:基本数据类型
基本数据类型又可以划分为4大类8小种:
第一类:整数型
byte,short,int,long (没有小数的)
第二类:浮点型
float,double (带有小数的)
第三类:布尔型
boolean:只有两个值true和false,true表示真,false表示假
第四类:字符型
char:java中规定字符型字面量必须使用单引号括起来。属于文字。
8小种:
byte,short,int,long
float,double
boolean
char
第二种:引用数据类型
字符串型String属于引用数据类型。
String字符串不属于基本数据类型范畴。
java中除了基本数据类型之外,剩下的都是引用数据类型。
引用数据类型后期面向对象的时候才会接触。
1.3、8种基本数据类型中,不同数据类型有什么不同?
整数型:byte short int long有什么区别?
浮点型:float和double有什么区别?
区别:占用的空间大小不同。
关于计算机存储单位?
计算机只能识别二进制。(1001101100...)
1字节 = 8bit(8比特)--> 1byte = 8bit
1bit就是一个1或0.
1KB = 1024byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
byte b = 2; 在计算机中是这样表示的:00000010
short s = 2; 在计算机中是这样表示的:00000000 00000010
int i = 2;在计算机中是这样表示的:00000000 00000000 00000000 00000010
...
类型 占用字节数量(byte)
------------------------------------
byte 1
short 2
int 4
long 8
float 4
double 8
boolean 1 (1byte的1或0,00000001(true)或00000000(false))
char 2
关于二进制?
二进制???
1 2 3 4 5 6 7
1 10 11 100 101 110 111 ....
十进制转换成二进制
125 转换成二进制???
办法:除以2,然后余数逆序输出。
1111101
二进制转换成十进制
2的2次方 2的1次方 2的0次方
1 1 1
4 2 1
1*4 + 1*2 + 1*1 = 7
2的2次方 2的1次方 2的0次方
1 0 1
4 2 1
1*4 + 0*2 + 1*1 = 5
1.4、byte类型的取值范围?
byte是 [-128 ~ 127] 共可以标识256个不同的数字。
byte类型的最大值是怎么计算出来的?
byte是1个字节,是8个比特位,所以byte可以存储的最大值是:
01111111
注意:在计算机当中,一个二进制位最左边的是符号位,当为0时表示正数,
当为1时表示负数。所以byte类型最大值是:01111111
那么是不是2的7次方-1呢?
是不是:10000000(前边是一个二进制) - 1
byte类型最大值是:2的7次方 - 1.
有几个取值范围需要大家记住:
(1个字节)byte: [-128 ~ 127]
(2个字节)short:[-32768 ~ 32767] 可以表示65536个不同的数字
(4个字节)int: [-2147483648 ~ 2147483647]
(2个字节)char: [0~65535] 可以表示65536个不同的数字
short和char实际上容量相同,不过char可以表示更大的数字。
因为char表示的是文字,文件没有正负之分,所以char可以表示
更大的数字。
1.5、对于8种基本数据类型,字符编码
其中byte,short,int,long,float,double,boolean,这7种类型计算机表示起来
比较容易,因为他们都是数字。其中布尔类型只有两个值true和false,实际上
true和false分别在C++中对应的是1和0,1为true,false为0。
对于char类型来说计算机表示起来比较麻烦,因为char对应的是文字,每一个国家
的文字不一样,文字不能直接通过“自然算法”转换成二进制。这个时候怎么办?
字符编码诞生了。
什么是字符编码?
字符编码是人为的定义的一套转换表。
在字符编码中规定了一系列的文字对应的二进制。
字符编码其实本质上就是一本字典,该字段中描述了文字与二进制之间的对照关系。
字符编码是人为规定的。(是某个计算机协会规定的。)
字符编码涉及到编码和解码两个过程,编码和解码的时候必须采用同一套字符编码
方式,不然就会出现乱码。
关于字符编码的发展过程?
起初的时候计算机是不支持文字的,只支持科学计算。实际上计算机起初是为了
战争而开发的,计算导弹的轨道....
后来随着计算机的发展,计算机开始支持文字,最先支持的文字是英文,英文
对应的字符编码方式是:ASCII码。
ASCII码采用1byte进行存储,因为英文字母是26个。(键盘上所有的键全部算上也
超不过256个。1byte可以表示256种不同的情况。所以英文本身在计算机方面就占有
优势。)
'a' --(采用ASCII码进行编码)-> 01100001
01100001 --(采用ASCII码进行解码)-> 'a'
如果编码和解码采用的不是同一个编码方式,会出现乱码。
'b' ---> 98
'c' ---> 99...
'a' ---> 97
'A' ---> 65
'B' ---> 66
...
'0' ---> 48 (这个'0'不是那个0,是文字'0')
'1' ---> 49
随着计算机语言的发展,后来国际标准组织制定了ISO-8859-1编码方式,
又称为latin-1编码方式,向上兼容ASCII码。但不支持中文。
后来发展到亚洲,才支持中文,日文,韩文....
中文这块的编码方式:GB2312<GBK<GB18030 (容量的关系)
以上编码方式是简体中文。
繁体中文:big5(*使用的是大五码。)
在java中,java语言为了支持全球所有的文字,采用了一种字符编码方式
叫做unicode编码。unicode编码统一了全球所有的文字,支持所有文字。
具体的实现包括:UTF-8 UTF-16 UTF-32....
需要记住:
ASCII('a'是97 'A'是65 '0'是48...)
ISO-8859-1(latin-1)
GB2312
GBK
GB18030
Big5
unicode(utf8 utf16 utf32)
2、8种数据类型
2.1 字符型 char
1) 1、char占用2个字节。
2、char的取值范围:[0-65535]
3、char采用unicode编码方式。
4、char类型的字面量使用单引号括起来。
5、char正好可以存储一个汉字。
2) 关于java中的转义字符:
java语言中“\”负责转义。
\t 表示制表符tab
3) 1、整数能否直接赋值给char
2、char x = 97;
这个java语句是允许的,并且输出的结果是'a'
经过这个测试得出两个结论:
第一个结论:当一个整数赋值给char类型变量的时候,会自动转换成char字符型,
最终的结果是一个字符。
第二个结论:当一个整数没有超出byte short char的取值范围的时候,
这个整数可以直接赋值给byte short char类型的变量。
2.2 整数型 byte short int long
1) 整数型在java语言*4种类型:
byte 1个字节 最大值127
short 2个字节 最大值32767
int 4个字节 2147483647是int最大值,超了这个范围可以使用long类型。
long 8个字节
1个字节 = 8个二进制位
1byte = 8bit
对于以上的四个类型来说,最常用的是int。
开发的时候不用斤斤计较,直接选择使用int就行了。
在java语言中整数型字面量有4种表示形式:
十进制:最常用的。
二进制
八进制
十六进制
2) 在java中有一条非常重要的结论,必须记住:
在任何情况下,整数型的“字面量/数据”默认被当做int类型处理。(记住就行)
如果希望该“整数型字面量”被当做long类型来处理,需要在“字面量”后面添加L/l
建议使用大写L,因为小写l和1傻傻分不清。
3) 1、小容量可以直接赋值给大容量,称为自动类型转换。
2、大容量不能直接赋值给小容量,需要使用强制类型转换符进行强转。
但需要注意的是:加强制类型转换符之后,虽然编译通过了,但是运行
的时候可能会损失精度。
4) java中有一个语法规则:
当这个整数型字面量没有超出byte的取值范围,那么这个
整数型字面量可以直接赋值给byte类型的变量。
这种语法机制是为了方便写代码,而存在的。
5)计算机永远存储的都是二进制补码形式
byte b = (byte)300;
// 这个结果会输出多少呢?
System.out.println(b); // 44
byte b = (byte)150;
// 这个结果会输出多少呢?
System.out.println(b); // -106
6)byte、char、short做混合运算的时候,各自先转换成int再做运算。
7)① 多种数据类型做混合运算的时候,最终的结果类型是“最大容量”对应的类型。
char+short+byte 这个除外。
因为char + short + byte混合运算的时候,会各自先转换成int再做运算。
② java中规定,int类型和int类型最终的结果还是int类型。
int temp = 10 / 3; // / 是除号。(最终取整)
System.out.println(temp); // 3.33333吗?结果是:3
// 在java中计算结果不一定是精确的。
int temp2 = 1 / 2;
System.out.println(temp2); // 0
2.3 浮点型:float double
关于java语言中的浮点型数据
浮点型包括:
float 4个字节
double 8个字节
float是单精度
double是双精度
double更精确
比如说:
10.0 / 3 如果采用float来存储的话结果可能是:3.33333
10.0 / 3 如果采用double来存储的话结果可能是:3.3333333333333
但是需要注意的是,如果用在银行方面或者说使用在财务方面,double
也是远远不够的,在java中提供了一种精度更高的类型,这种类型专门
使用在财务软件方面:java.math.BigDecimal (不是基本数据类型,属于
引用数据类型。)
float和double存储数据的时候都是存储的近似值。
为什么?
因为现实世界中有这种无线循环的数据,例如:3.3333333333333....
数据实际上是无限循环,但是计算机的内存有限,用一个有限的资源
表示无限的数据,只能存储近似值。
整型-long类型占用8个字节。
浮点型-float类型占用4个字节。
哪个容量大?
注意:任意一个浮点型都比整数型空间大。
float容量 > long容量。
java中规定,任何一个浮点型数据默认被当做double来处理。
如果想让这个浮点型字面量被当做float类型来处理,那么
请在字面量后面添加F/f。
1.0 那么1.0默认被当做double类型处理。
1.0F 这才是float类型。(1.0f)
2.4 布尔型:boolean
1、在java语言中boolean类型只有两个值,没有其他值:
true和false。
不像C或者C++,C语言中1和0也可以表示布尔类型。
2、boolean类型在实际开发中使用在哪里呢?
使用在逻辑判断当中,通常放到条件的位置上(充当条件)
3、转换规则
1、八种基本数据类型中,除 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、多种数据类型混合运算,各自先转换成容量最大的那一种再做运算;
所有的笔试题都超不出以上的6条规则。死记硬背!!!!!!!!!!!!!!!!
传送门
上一章:JavaSe 基础 - 第三章 变量
下一章:JavaSe 基础 - 第五章 运算符
本文地址:https://blog.csdn.net/W1324926684/article/details/107325761