基本数据类型包括四大类八小种:
第一类:整数型 byte,short,int,long 第二类:浮点型 float,double 第三类:布尔型 boolean 第四类:字符型 char注意:字符串不属于基本数据类型,属于引用数据类型,字符属于基本数据类型
④八种基本数据类型各自占用空间大小是多少?基本数据类型 | 占用空间大小【单位:字节】 |
---|---|
byte | 1 |
short | 2 |
int | 4 |
long | 8 |
float | 4 |
double | 8 |
boolean | 1 |
char | 2 |
计算机在任何情况下都只能识别二进制
【现代计算机底层采用交流电的方式,接通和断开就两种状态】
1 byte = 8 bit 【1个字节 = 8个比特位】
一个比特位表示一个二进制位: 1/0
1 KB = 1024 Byte
…
整数型当中的byte类型,占用1个字节,所以byte类型数据占用8个比特位。
* 关于java中的数字类型,数字都是有正负之分的,所以在数字的二进制当中有一个二进制位被称为“符号位”。
* 并且这个符号位在所有二进制位的最左边,0表示正数,1表示负数。
* byte类型最大值:0111111转化为十进制2^7-1=127
* byte类型最小值:-128
* byte类型取值范围[-128 ~ 127]
⑧计算机是怎么表示现实世界中的文字的呢?【字符编码】
char 类型表示的是现实世界中的文字,文字和计算机二进制之间“默认”情况下是不存在任何转换关系的。
为了让计算机可以表示现实世界当中的文字,我们需要进行人为的干涉,需要人负责提前制定好“文字”和“二进制”之间的对照关系。这种对照关系被称为字符编码。
计算机最初只支持英文,最先出现字符编码是:ASCII码
a'---->97【01100001】
a'—(按照ASCII解码)—>01100001—(按照ASCII编码)—>'a'
编码和解码的时候采用同一套字典/对照表,不会出现乱码。
当解码和编码的时候采用的不是同一套对照表,会出现乱码问题。
随着计算机的发展,后来出现了一种编码方式,是国际化标准组织ISO制定的,这种编码方式支持西欧语言,向上兼容ASCII码,仍然不支持中文。这种编码方式是:ISO-8859-1,又被称为latin-1
随着计算机向亚洲发展,计算机开始支持中文、日文、韩文等文字,其中支持简体中文的编码方式:
GB2312<GBK<B18030
支持 繁体中文:大五码 big5
后来出现了一种编码方式同意了全球所有的文字,容量较大,这种编码方式叫做:unicode编码
java语言源代码采用的是unicode编码方式,所以标识符可以用中文
⑨八种数据类型的取值范围基本数据类型 | 取值范围 | 默认值 |
---|---|---|
byte | -128~127 | 0 |
short | -32768~32767 | 0 |
int | -2147483648~2147383647 | 0 |
long | 0 | |
float | 0.0 | |
double | 0.0 | |
boolean | true,false | false |
char | 0~65535 | \u0000 |
注意:short和char所表示的种类总数是一样的,只不过char可以表示更大的正整数,因为char没有负数
⑩关于八种基本数据类型中的默认值public class DataTypeTest01{
//成员变量没有手动赋值系统会默认赋值,局部变量不会
//变量还是遵守这个语法:必须先声明再赋值,才能访问
static int f;//成员变量
public static void main(String[] args){
System.out.println(f);//结果是0
}
}
八种数据类型的默认值是一切向0看齐
2、数据类型详解知识点大部分在代码中
①字符型charpublic class DataTypeTest02
{
public static void main(String[] args){
char c = 'a';
System.out.println(c);
char x ='国';
System.out.println(x);
//一个中文占用两个字节,char类型正好是两个字节
//所以java中的char类型变量可以存储一个中文字符
//char y = 'ab';
//ab是字符串不能用单引号括起来,编译错误
//char k = "a";
//"a"是字符串类型,k是char类型,类型不兼容,编译错误
}
}
转义字符
转义字符出现在特殊字符之前,会将特殊字符转换成普通字符
public class DataTypeTest03
{
public static void main(String[] args){
char c1 = 'n';
System.out.println(c1);//普通的n字符
char c2 = '\n'; //编译能够通过,说明这不是个字符串,而是个字符
//这是一个“换行符”,属于char类型
//反斜杠在java语言中有转义功能
//System.out.println();和 System.out.print();的区别:
//println表示输出之后换行,print表示输出但是不换行
char c3 = '\t';//制表符tab
//强调:制表符和空格不一样,他们的ASCII码不同
System.out.print("A");
System.out.println(c3);
System.out.println("B");//输出的结果为A B
//要求在控制台上输出“反斜杠字符”
//char k = '\';
//反斜杠和后面的单引号一起成为一个字符 ,\'表示普通不具备特殊含义的单引号字符
char k = '\\';
//解释:第一个反斜杠具有转义功能,将后面的反斜杠转义为普通的反斜杠字符
//结论:在java中两个反斜杠表示一个普通的反斜杠字符
System.out.println(k); //输出结果为 \
//要求输出一个单引号
//char a = ''; java中不允许这样编写程序,编译报错
char a = '\''; //反斜杠将第二个单引号转换成普通的单引号字符,第一个单引号与最后一个单引号配对
System.out.println(a); //输出结果为 '
char m = '中';
System.out.println(m);
/*JDK中自带的native2ascii.exe命令,可以将文字转换成unicode编码形式
怎么使用这个命令:
在命令行输入native2ascii,回车,输入文字之后回车即可得到unicode编码
*/
char n = '\u4e2d'; //'中'对应的unicode编码是 4e2d
//其中\u 表示后面的一串数字是某个文字的unicode编码
}
}
②整数型
java中的整数型字面值被默认当作int类型处理。要让整数型被当作long类型来处理的话,需要在整数型字面值后面添加l / L,建议使用大写的L
java语言当中的整数型字面值有三种表示方式:
第一种方式:十进制【是一种缺省的默认方式】
第二种方式:八进制【在编写八进制整数型字面值的时候需要以0开始】
第三种方式:十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
public class DataTypeTest04
{
public static void main(String[] args){
int a = 10;
int b = 010;//整数型字面值以0开头的,后面那一串数字就是八进制形式
int c = 0x10;//整数型字面值以0x开头的,后面那一串数字就是十六进制形式
System.out.println(a);//10
System.out.println(b);//8
System.out.println(c);//16
System.out.println(a+b+c);//34
int i = 123;
//123这个整数型字面值也是int类型
//i声明变量时也是int类型
//int类型的123赋值给int类型的变量i,不存在类型转换
long x = 456;
//456整数型字面值被当作int类型,占用4个字节
//x变量在声明的时候时long类型,占用8个字节
//int类型的字面值456赋值给long类型的变量x,存在类型转换
//int类型转换成long类型
//int类型是小容量
//long类型是大容量
//小容量可以自动转换成大容量,成为自动类型转换机制
//long z = 2147483648;
//编译错误:过大的整数2147483648
//2147483648被当作int类型4个字节处理,但是这个字面值超出int的范围
//解决错误
//2147483648一上来就当作long处理
long z = 2147483648L; //不存在类型转换
}
}
public class DataTypeTest05{
public static void main(String[] args){
long x = 100L;
//int y = x;
//编译报错,大容量不能直接赋值给小容量
//大容量转换成小容量,需要进行强制类型转换
//强制类型转换需要加“强制类型转换符”
//加上强制类型转换符之后编译通过了,但是运行阶段可能损失精度
//所以强制类型转换谨慎使用,因为损失精度之后可能损失严重
int y = (int)x;
//强转原理:将左边的二进制砍掉【所有的数据强转的时候都是这样完成的】
//原始数据:00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 //00000000
//强转之后的数据:10000000 00000000 00000000 00000000
//将以上的补码转换到原码就是最终的结果
long k = 2147483648L;
int e = (int)k;
System.out.println(e);//损失精度严重,结果是负数
//根据目前所学内容,下面程序应该无法编译通过
//理由:50是int类型的字面值,b是byte类型的变量,显然大容量int转换成小容量byte
//大容量转换成小容量是需要添加强制类型转换符的,以下程序没有添加强转符号,所以编译报错。
byte b = 50;
//编译发现编译可以通过
//在java语法当中,当一个整数类型字面值没有超出byte类型取值范围的话,该字面值可以直接赋值给byte //类型的变量
//byte b2 = 128; 编译报错
//128这个int类型的字面值已经超出了byte类型的取值范围,不能直接赋值给byte类型变量
//纠正错误
byte b2 = (byte)128;
//一定会损失精度
//原始数据:00000000 00000000 00000000 10000000
//强转之后:10000000
}
}
小结
今天主要学习了数据类型的作用,分类,所占空间的大小,取值范围,默认值。详解中,学习了字符型,其中学习了转义字符的用法,整数型,其中学习了类型转换等