数据类型(上)
数据类型用来声明变量,程序在运行过程中根据不同的数据类型分配不同大小的空间。
例如:
int i = 10;
double d = 1.23;
i变量和d变量数据类型不同,空间大小不同。
数据类型在java语言中包括两种:
第一种:基本数据类型
基本数据类型有可以划分为4大类8小种:
8小种:
byte,short,int,long,float,double,boolean,char
第一类:整数型:byte,short,int,long(没有小数)
第二类:浮点型:float,double(带有小数的)
第三类:布尔型:boolean(只有两个值true和false)
第四类:字符型:char(java种规定字符必须使用单引号括起来,属于文字。)
第二种:引用数据类型
字符串型String属于引用数据类型。String字符串不属于基本数据类型范畴。
java种除了基本数据类型之外,剩下的都是引用数据类型。
引用数据类型后期面向对象的时候才会接触。
计算机存储单位
整数型:byte,short,int,long有什么区别?
浮点型:float,double有什么区别?
区别就是:占用的空间大小不同。
计算机只能识别二进制。
1字节 = 8bit(8比特)-->1byte = 8bit
byte占用1个字节。short占用2个字节。int占用4个字节。long占用8个字节。float占用4个字节。double占用8个字节。boolean占用1个字节。char占用2个字节。
1KB = 1024byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
二进制与十进制
十进制转换成二进制
方法:除以2,然后余数逆序输出
例如:125转换为二进制
125/2 = 62 余1
62/2 = 31 余0
31/2 = 15 余1
15/2 = 7 余1
7/2 = 3 余1
3/2 = 1 余1
1/2 = 0 余1
逆序输出:1111101
二进制转换成十进制
方法:权相加法
例如:1111101
12^6+125+1*24+12^3+122+0*21+1*2^0=64+32+16+8+4+0+1=125
十六进制:满16进1位
八进制:满8进1位
取值范围
byte类型的取值范围
byte是 [-128~127] 共可以标识256个不同的数字。
byte类型的最大值是怎么计算出来的呢?
byte是1个字节,8个比特位,所以byte可以存储的最大值是:01111111。
注意:在计算机当中,一个二进制位最左边的是符号位,当为0是表示整数,当为1时表示负数。
所以,byte类型最大值时2的7次方减1,也就是128-1=127
有几个取值范围需要大家记住:
byte(1个字节):【-128 ~ 127】
short(2个字节):【-32768 ~ 32767】 可以表示65536个数字
int(4个字节):【-2147483648 ~ 2147483647】
char(2个字节):【0 ~ 65535】 可以表示65536个数字
short和char实际上容量相同,不过char可以表示更大的数字。因为char表示的是文字,文字没有正负之分,所以char可以表示更大的数字。
字符编码
对于8种基本数据类型来说,其中byte,short,int,long,folat,double,boolean,这7种类型计算机表示起来比较容易,因为他们都是数字。其中布尔类型只有两个值true和false。实际上true和false分别在c++种对应的是1和0,1为true,0为false。
对于char类型来说计算机表示起来比较麻烦,因为char对应的是文字。每一个国家的文字不一样,文字不能直接通过自然算法转换成二进制。
所以字符编码产生了。
字符编码是人为定义的一套转换表。在字符编码种规定了一系列的文字对应的二进制。
字符编码其实本质上就是一本字典,该字典中描述了文字于二进制之间的对照关系。
字符编码是认为规定的。(某个计算机协会规定的)
字符编码涉及到编码和解码两个过程,编码和解码的时候必须采用同一套字符编码方式,不然就会产生乱码。
起初,计算机是不支持文字的,只支持科学计算。后来随着计算机的发展,计算机开始支持文字,最先支持的文字是英文,英文对应的字符编码方式是ASCII码。
ASCII码采用1byte进行存储,键盘上所有的键全部算上也不超过256个。所以英文本身在计算机方面就占有优势。
'a' ---> 97 ---> 01100001
'A' ---> 65 ---> 01000001
'0' ---> 48 ---> 00101110(这个'0' 不是数字0,是文字'0' )
'a'--采用ASCII码进行编码-->01100001
01100001--采用ASCII码进行解码-->'a'
ASCII码 对照表.png
随着计算机语言的发展,后来国际标准组织制定了ISO-8859-1编码方式,又称为lating-1编码方式,向上兼容ASCII码,但不支持中文。后来发展到亚洲才支持中文,日文,韩文....
简体中文这块的编码方式:GB2312<GBK<GB18030(容量的关系)
繁体中文:Big5(台湾使用的是大五码)
在java中,java为了支持全球所有的文字,采用了一种字符编码方式叫做Unicode编码。unicode编码统一了全球所有的文字,支持所有文字。具体实现包括:UTF-8 UTF-16 UTF-32.....。
字符型:char
char占用2个字节。
char的取值范围是 [0~65535]
char采用unicode编码方式。
char类型的字面量使用单引号括起来。
char可以存储一个汉字。一个汉字占用2个字节,char类型正好占用两个字节。
转义字符
java语言中”\“负责转义。
**加上一个特殊的字符,共同构成一个新的字符。
** 的出现会将紧挨着的后面的字符进行转义。
\t 表示制表符tab
\n 表示换行符
System.out.println();输出括号内内容之后换行
System.out.print();输出括号内内容之后不换行
如果想要在控制台输出一个 ' 字符,可以使用 System.out.println(''');
' 表示一个普通不能再普通的单引号字符。
同理如果想要在控制台输出一个 \ 字符,可以使用 System.out.println('\');
\在java中两个反斜杠代表了一个”普通的反斜杠字符“。
如果想要在控制台输出"test",可以使用 System.out.println(""test"");
"表示一个普通的双引号字符。
\u反斜杠u表示后面的是一个字符的unicode编码。
unicode编码是十六进制的。
例如:System.out.println('\u4e2d');
输出的结果是:中
在较低版本JDK(例如JDK8)中,bin目录下会有一个native2ascii.exe的命令,在DOS命令窗口输入这个命令后,输入字符,在敲击回车,就会出现它的unicode编码。
整数型的4种编写方式
对于整数型来说,最常用的是int,开发的时候不用斤斤计较。
在java语言种整数型字面量有4种表示形式:
十进制:最常用的。
二进制:0b开头
八进制:0开头
十六进制:0x开头
public class Int{
public static void main(String[] args){
//十进制
int a = 10;
System.out.println(a);//输出10
//八进制
int b = 010;
System.out.println(b);//输出8
//十六进制
int c = 0x10;
System.out.println(c);//输出16
//二进制(JDK8的新特性,低版本不支持)
int d = 0b10;
System.out.println(c);//输出2
}
}
类型转换
在java中有一条非常重要的结论:在任何情况下,整数型的”字面量“默认被当作int类型处理。
如果希望该”整数型字面量“被当作long类型来处理,需要在”字面量“后面添加L或l。建议使用大写的L,因为小写l和1傻傻分不清。
小容量可以自动转换成大容量,这种操作被称为:自动类型转换。
过大的整数可以在后面加一个L,把int类型转换位long类型。
大容量转换成小容量,要想编译通过,必须加强制类型转换符,进行强制类型转换。
需要注意的是:加强制类型转换符之后,虽然编译通过了,但是运行的时候可能会损失精度。
强制类型转换符格式:(强制转换的类型)
例如:
long x = 100L;
int y = (int)x;//这个(int)就是强制类型转换符
long类型强转为int类型会自动将前面的4个字节砍掉。
int类型强转为byte类型会自动将前面的3个字节砍掉。
java中有一个语法规则:当这个整数型字面量没有超出byte或short的取值范围,那么这个整数型的字面量是可以直接赋值给byte或short类型的变量。
这种语法机制是为了方便写代码而存在的。
网友评论