一、
关于java中的数据类型:
1.数据类型的作用是什么?
程序当中有很多数据,每一个数据都是由相关类型的,不同数据类型的数据占用空间大小不同。
数据类型的作用是指导JVM在运行程序的时候给该数据分配多大的内存空间。
2.java中的数据类型包括两种:
*基本数据类型
*引用数据类型
类、接口、数组…
3.关于基本数据类型:
*基本数据类型包括四大类八小种
第一类:整数型
byte shot int long
第二类:浮点型
float double
第三类:布尔型
boolean
第四类:字符型
char
4.字符串"abc"不属于基本数据类型,属于“引用数据类型”,字符属于基本数据类型
*字符串使用双引号"abc"
*字符使用单引号'a'
5.八种基本数据类型各自占用空间大小是多少?
基本数据类型 |
占用空间大小 |
byte |
1 |
short |
2 |
int |
4 |
long |
8 |
float |
4 |
double |
8 |
boolean |
1 |
char |
2 |
6.计算机在任何情况下只能识别二进制(现代的计算机底层采用交流电的方式,接通和断开就两种状态,计算机只识别1或0,其他不认识)
7.什么是二进制?
*数据的一种表示形式,十进制表示满十进一原则,二进制表示满二进一原则。
8.字节(byte)
1 Byte = 8 bit(1个字节等于8个比特位,1个比特位表示一个二进制位:1/0)
1 KB = 1024 Byte
1 MB =1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
1 TB =1024*1024*1024*1024*8 bit
9.整数型当中的byte类型,占用一个字节,所以byte类型的数据占用8个比特位,那么byte类型的取值范围是多少?
*关于java中的数字类型,数字都是由正负之分的,所以在数字的二进制当中有一个二进制位成为”符号位“,并且这个”符号位“在所有二进制的最左边,0表示整数,1表示负数。
*byte类型最大值:01111111
【00000000 00000000 00000000 10000000(二进制)
减去1的结果是:
00000000 00000000 00000000 01111111 (二进制)
】
*byte类型最大值:2的7次方-1,结果是:127
*byte类型最小值: -128
*byte类型取值范围:[-128 ~ 127]
*bytel类型可表示256(包括0)个不同数字(256个不同的二进制)
10.计算机只认识二进制,那么计算机是怎么表示现实世界当中的文字的呢?
*八种基本数据类型当中,byte,short,int,long,float,double,boolean这7种数据类型计算机在表示的时候比较容易,因为底层都是数字,十进制的数字和二进制之间存在一种固定的转换规则
*但是八种基本数据类型char类型表示的是现实世界中的文字,文字和计算机二进制之间”默认“情况下是不存在任何转换关系的。
*为了让计算机可以表示现实世界当中的文字,我们需要进行人为的干涉,需要人负责提前制定好”文字“和”二进制“之间的对照关系。这种对照转换关系被称为:字符编码。
*计算机最初只支持英文,最早出现的字符编码是:ASCII码
'a' --> 97 [01100001]
'A'--> 65
'0'--> 48
'a' --(按照ASCII解码)-->01100001
01100001--(按照ASCII编码--> 'a'
*编码和解码时采用同一套字典/对照表,不会出现乱码
当解码和编码的同时采用的不是同一套对照表,会出现乱码问题
*随着计算机的发展,后来出现了一种编码方式,是国际化标准组织ISO制定的,这种编码方式支持西欧语言,向上兼容ASCII码,仍然不支持中文。这种编码方式是:ISO-8859-1,又称为latin-1
*随着计算机向亚洲发展,计算机开始支持中文,日文,韩文等国家文字,其中支持简体中文的编码方式:
GB2312 *支持繁体中文:大五码 *后来出现一种编码方式统一了全球所有的文字,容量较大,这种编码方式叫做:unicode编码 unicode编码方式有很多种具体的实现: UTF-8 UTF-16 UTF-32 *java语言源代码采用的是unicode编码方式,所以”标识符“可以用中文 *现在在实际开发中,一般使用UTF-8编码方式较多。【统一编码方式】 11.八种基本数据类型的取值范围 类型 取值范围 byte [-128~127] short [-32768~32767] int [-2147483648~2147483647] long float double boolean true false char [0~65535] 注意:short和char所表示的种类总数是一样的,只不过char可以表示更大的正整数,因为char没有负数 12.关于八种基本数据类型的默认值 数据类型 默认值 -------------------------------------------------------------- byte short int long 0 float double 0.0 boolean false[C语言中,true表示1,false表示0 char \U0000 注意:八种基本数据类型的默认值是一切向0看齐 13.成员变量没有手动赋值系统会默认赋值,局部变量不会 二、 关于java语言中的char类型: 反斜杠(\)表示转义 转义字符(\)出现在特殊字符之前,会将特殊字符转换成普通字符 \n 换行 \b 退格 \t 水平制表符 \r 回车 \' 单引号字符 \f 换页 \" 双引号字符 \\ 反斜杠字符 注意:制表符和空格不同,他们的ASCII不一样,体现在键盘上两个不同的“按键” *一个中文占用两个字节,char类型正好是2个字节 所以java中的char类型变量可以存储一个中文字符 *JDK中自带的native2ascii.exe命令,可以将文字转换成unicode编码形式 怎么使用这个命令? 在命令行输入native2ascii,回车,然后输入文字之后回车即可得到unicode编码 *“\u" 后面的一串数字是某个文字的unicode编码 *字符型数据实际上是int数据的一个子集,char类型的数据可直接转换为int类型的数据,而int类型的数据转换成char类型的数据需要强制转换。 关于java语言当中的整数型: 1.java语言当中的”整数型字面值“被默认当作int类型来处理,要让这个”整数型字面值“被当作long类型来处理的话,需要在”整数型字面值“后面添加l/L,建议使用大写的L。 2.java语言当中的的整数型字面值有四种表示方法: 第一种方式:十进制(是一种缺省默认的方式) 第二种方式:二进制(在编写二进制整数型字面值时需要以0b或0B开始) 第三种方式:八进制(在编写八进制整数型字面值时需要以0开始) 第四种方式:十六进制(在编写十六进制整数型字面值时需要以0x/0X开始) 3.long x = 456; 456整数型字面值被当作int类型,占用四个字节 x变量在声明时时long类型,占用8个字节 int类型的字面值456赋值给long类型的变量x,存在类型转换 int类型是小容量,long类型是大容量 小容量可以自动转换成大容量,称为自动类型转换机制 4.在字面值一上来就当作long类型来处理,在字面值后面添加L 5.long x = 100L; int y = x; 编译报错,大容量不能直接赋给小容量 6.大容量转换成小容量,需要进行强制类型转换,强制类型转换需要加”强制类型转换符“ 加上强制类型转换符之后编译通过了,但是运行阶段可能损失精度 所以强制类型转换谨慎使用,因为损失精度之后可能损失很严重 7.在java语言中,当一个整数型字面值没有超出byte类型取值范围的话,该字面值可以直接赋值给byte类型的变量 8.当一个整数字面值没有超出byte,short,char的取值范围,这个字面值可以直接赋值给byte,short,int,char类型的变量,这种机制SUN允许了,目的是为了方便程序员的编程。 三、 关于浮点型数据类型: float 单精度【4个字节】 double 双精度【8个字节,精度较高】 double的精度太低【相对来说】,不适合做财务软件 财务涉及到钱的问题,要求精度较高,所以SUN在基础SE类库当中 为程序员准备了精确度更高的类型,只不过这种类型是一种引用数据类型, 不属于基本数据类型,它是:java.math.BigDecimal 其实java程序中SUN提供了一套庞大的类库,java程序员是基于这套基础的类库来进行开发的。所以要知道java的 SE类库的字节码在哪儿。要知道java的SE源码在哪? SE类库字节码:C:\Program Files\Java\jdk1.8.0_111\lib SE类库源码:C:\Program Files\Java\jdk1.8.0_111\src.zip 例如:String.java和String.class 我们的(String[] args)中的String使用的就是String.class字节码文件 在java语言当中,所有的浮点型字面值(3.0),默认被当作double类型来处理, 要想该字面值当作float类型来处理,需要在字面值后面添加F/f 例: float f = 5.1 //编译错误 5.1是double类型的字面值,f是float类型的变量,大容量转换为小容量需要加强制类型转换符,两种解决方案 第一种:强制类型转换 float f = (float)5.1 第二种:没有类型转换 float f = 5.1f 注意:double和float在计算机内部二进制存储的时候都是近似值 在现实世界当中有一些数字是无限循环的,例如3.33333333…… 计算机的资源是有限的,用有限的资源存储无限的数据只能存储近似值 关于布尔型数据类型: boolean 在java语言当中boolean类型只有两个值:true和false,没有其他值 不像C语言当中,0和1可以表示假和真 在底层存储的时候boolean类型占用1个字节,因为实际存储的时候false底层是0 true底层是1 布尔类型在实际开发当中非常重要,经常使用在逻辑运算和条件控制语句当中 关于基本数据类型之间的互相转换,转换规则 1.八种基本数据类型当中出布尔类型之外剩下的7种类型之间都可以互相转换 2.小容量向大容量转换,称为自动类型转换,容量从小到大排序, byte char< 注:任何浮点类型不管占用多少个字节,都比整数型容量大 char和short可表示的种类数量相同,但是char可以取得更大的正整数 3.大容量转换成小容量,叫做强制类型转换,需要加强制类型转换符,程序才能编译通过,但是在运行阶段可能会损失精度,所以谨慎使用 4.当整数·字面值没有超过byte,short,char的取值范围,可以直接赋值给byte,short,charl类型的变量 5.byte,short,char混合运算的时候,各自先转换成int类型再做运算 6.多种数据类型混合运算,先转换成容量最大的那种类型在做运算 注: byte b = 3; 可以编译通过,3没有超出byte类型的取值范围 int i=10; byte b = i/3 编译错误,编译器只检查语法,不会”运算“i/3