一、数据类型
(1)数据类型概述
(a)数据类型有什么用?
数据类型用来声明变量,程序在运行过程汇总根据不同的数据类型分配不同大小的空间。
Int I =10;
Double d =1.23;
i变量d变量类型不同,空间大小不同。
(b)数据类型的分类:
第一种:基本数据类型
基本数据类型又可以划分为4大类8小种:
第一类:整数型,第二类:浮点型,第三类:布尔型,第四类:字符型
8小种:(小写)
Byte,short,int,long,Float,double,Boolean,char
第二种:引用数据类型
字符串型String属于引用数据类型。
String字符串不属于基本数据类型范畴。
java中除了基本数据类型外,剩下的都是引用数据类型。
(c)8种基本数据类型中(计算机存储单位)
整数型:byte short int long有什么区别?
浮点型:float和double有什么区别?
区别:占用的空间大小不同。
(d)关于计算机存储单位?
计算机只能识别二进制。(1001)
1字节=8比特(bit)
1bit就是一个1或0
Byte short int long分别占用的空间大小为
1 2 4 8
Float double boolean char
4 8 1 2
(e) byte类型的取值范围?
byte是[-128 ~127]共,可以表示256个不同的数字。
byte类型的最大值是怎么计算出来的?
byte是1个字节,是8个比特位,所以byte可以存储的最大值是:
01111111
二进制最前面的是代表符号位,0代表正数。1代表负数。
2的7次方-1就是byte的最大值128-1=127
Byte:[-128 ~127]
Short:[-32768~32767]可以表示65536个不同的数字
Int:[-2147483648~2147483647]
Char:[0~65535]可以表示65536个不同的数字
short和char实际上容量相同,不过char可以表示更大的数字。
因为char表示的是文字,文字没有正负之分,所以char可以表示更大的数字。
(f)字符编码:
其中byte,short,int long, float,double,boolean这7种数据类型在计算中容易表示,
但是char类型,因为是各个国家的文字,没有办法直接转换成二进制,所以就想到了“字符编码”通过每个文字,对应一个二进制。最先是英文(ASCII)
'a'--(采用ASCII码进行编码)->01100001
01100001 --(采用ASCII码进行解码)->'a'
如果编码和解码采用的不是同一个编码方式,会出现乱码。
97(十进制)
在java中,java语言为了实现全球的文字,所以采取了unicode编码的方式。
具体实现:UTF-8 UTF-16 UTF-32 …
Char='ab'//这样是错误的。
(2)转义字符
Char c1 = '\t';
正常的情况下,它应该报错,但是它通过了,说明它不是字符串,它是单个字符。
所以它表示“制表符tab"
(1)java语言中\负责转义,\t表示制表符tab
(2)\n表示换行符
(3)如果想在控制台上输出\怎么办?
System.out.println('\');
//加入两个反斜杠,代表一个普通的\
System.out.println('\\’);
// \'表示一个普通的'的单引号字符。
System.out..println('\'');
//这样就输出了'
(4)\u表示后面的是Unicode编码
(3)自动类型转换
在java早上有一条非常重要的结论:
在任何情况下,整数型的“字面量/数据"默认被当做Int类型处理。
如果希望该“整数型字面量”被当做Long类型来处理,需要在“字面量”后面添加L/l
建议使用大写L,因为小写l和1分不清。
//分析一下是否存在类型转换?
//200这个字面量 是默认的int类型,int占有4,long占有8个
//小容量可以自动转换成大容量,这种操作被称为:自动类型转换。
Long b =200;
//这种不存在自动类型转换,就是赋值。
Long c = 300L;
Long a = 2147483647;
Long d = 2147483648;
//a会通过,但是d通过不了,会报数字太大,解决方法在后面加L
Long d = 2147483648L;
以上是自动类型转换(小容量可以自动赋值给大容量)
(4)强制类型转换
从大类型到小类型,可能存在损失。
那么怎么转换呢?要想编译通过,必须加强制类型转换符,进行强制类型转换。
当然也有可能损失精度。
Int smallA = (int) bigA;
这样编译就可以通过了,但是运行可能存在损失精度。
java中有一个语句规则:
当这个整数型字面量没有超出byte的取值范围,那么这个整数型字面量可以直接复制给byte类型的变量。
主要是方便写代码
Byte x =1;
Byte y =127;
Byte z =(byte)128;
(5)char
(1)整数能否直接赋值给char
1、两个都输出英文字母a,所以如果char后面有数字,java语句是允许的,并且java输出英文字母,当int赋值char时,会产生自动类型转换。
2、char类型取值范围是0~65535
当char c1 = 65536时,会报错。
3、当一个整数没有超出byte,short,char时的取值范围的时候,可以直接赋值给他们,不用强转。
(6)Byte short char混合运算
char、byte、short做混合运算的时候,各自先转换成Iint再做运算。
Char c1='a';
Byte b =1;
Short s = c1+b ;//这时候会报错,编译器不知道这个加法最后的结果是多少,只知道Int类型。
Short s = 98;//这样可以。
Short s =(short)(c1+b);
(7)多种数据类型混合运算
多种数据类型做混合运算的时候,最终的结果是“最大容量"对应的类型。
Char + short + byte 这个除外。
因为char + short + byte混合运算的时候,会自动转换成Int。
Long a = 10L;
Char c = 'a';
Short s =100;
Int I = 30;
//求和
System.out.println(a+c+s+i);//237
Int x =a+c+s+i//会报错误
Int x = (int)(a+c+s+i);
//java中规定,int类型和int类型最终的结果还是int类型
Int temp = 10/3
System.out.println(temp);//结果是3
(8)浮点型数据
关于java语言中的浮点型数据
浮点型包括:
Float 4个字节 单精度
Double 8个字节 双精度
财务软件用的是java.math.BigDecimal(这种不属于基本数据类型,这是引用数据类型)。
float和double存储数据的时候都是存储的近似值。
为什么?
因为现实世界中有这种无线循环的数据,例如:3.3333333
数据实际上是无限循环,但是计算机的内存有限,用一个有限的资源表示无限的数据,只能存储近似值。
long类型占用8个字节。
float类型占用4个字节。
那个容量大?
注意:任意一个浮点型都比整数型空间大。
float容量>Long容量。
java中规定,任何一个浮点型数据默认被当做double来处理,如果想让这个浮点型字面量被当做float来处理,那么,请在后面添加F/f
1.0 默认当做double类型来处理。
1.0F 这才是float类型
(9)布尔型数据
1、在java语言中boolean类型只有两个值,没有其他值。
true和false。
不像C或者C++,C语言中1和0也可以代表布尔类型。
2、boolean类型,在实际开发中使用在哪里呢?
使用在逻辑判断当中,通常放到条件的位置上。(充当条件)
(10)总结:在基本类型转换需要遵循的规则
1、八种数据类型中,除boolean类型不能转换外,其他类型均可转换。
2、如果整数型字面量没有超出byte,short, char的取值范围,均可直接将其赋值给byte,short ,char类型的变量。
3、小容量向大容量转换为自动类型转换,容量从小大到达的排序:
Byte<short(char)<int <long <float<double。
4、大容量转换为小容量,称为强制类型转换,编写的时候,必须添加“强制类型转换符".
5、byte,short,char类型混合运算时,先各自转换成int类型再做运算。
6、多种数据类型混合运算,各自先转换成容量最大的哪一种再做运算。
总结:我们生活中可能会各种各样的数据,比方说,我买了1瓶水,你是个好人,这是对的,各个国家有各个国家的文字,等等,那么怎么在计算机上去表示这些现实生活中的事物呢,在JAVA中它就用到了数据类型,通过不同的数据类型,在计算机内存中开辟的空间也是不一样的。