第四章 数据类型
1 数据类型
1.1 数据类型有什么用?
数据类型用来声明变量,程序在运行过程中根据不同的数据类型分配不同大小的空间。
int i = 10;
double d = 1.23;
i变量和d变量类型不同,空间大小不同
1.2 数据类型在java语言中包括两种
第一种:基本数据类型
基本数据类型又可以划分为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 八种基本数据类型
整数型:byte, short, int, long有什么区别?
浮点型:float和double有什么区别?
区别:占用的内存空间大小不同。
关于计算机存储单位?
计算机只能识别二进制。(1001010010100...)
1字节 = 8bit(比特) --> 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 (00000001)true, (00000000)false
char 2
关于二进制?
二进制
1 2 3 4 5 6 7
1 10 11 100 101 110 111...
十进制转换成二进制
125 转换成二进制
办法:除以2,然后余数逆序输出。
1111101
二进制转换成十进制
二进制1111011转换成十进制
如下图
1.4 byte类型的取值范围?
byte:[-128 ~ 127],可以标识256个不同的数字。
byte类型的最大值是怎么计算出来的呢?
byte是1个字节,是8个比特位,所以byte可以存储的最大值是:
01111111
注意:在计算机当中,一个二进制位最左边的是符号位,当为0时表示正数,当为1是表示负数,所以byte类型最大值是:01111111
01111111(二进制) = 10000000(二进制) - 1 = 127(十进制)
有几个取值范围需要大家记住:
byte: [-128 ~ 127]
short: [-32768 ~ 32767]
int: [-2147483648 ~ 2147483647]
char: [0 ~ 65535]
short和char实际上容量相同,不过char可以表示更大的数字,因为char表示的是文字,文字没有正负之分,所以char可以表示更大的数字
1.5 对于八种基本数据类型来说
其中byte, short, int, long, float, double, boolean,这7种数据类型计算机表示起来比较容易,因为他们都是数字。其中布尔类型只有两个值true和false,实际上true和false分别在c++中对应1和0,1为true,0为false。
对于char类型来说计算机表示起来比较麻烦,因为char对应的是文字,每一个国家的文字不一样,文字不能直接通过算法转换成二进制。这个时候怎么办?
字符编码诞生了。
什么是字符编码?
字符编码是人为的定义的一套转换表。
在字符编码中规定了一系列的文字对应的二进制。
字符编码其实本质上就是一本字典,该字典中描述了文字与二进制之间的对照关系。
字符编码是人为规定的。(是某个计算机协会规定的)
字符编码涉及到编码和解码两个过程,编码和解码的时候必须采用同一套字符编码方式,不然就会出现乱码。
关于字符编码的发展过程?
起初的时候计算机是不支持文字的,只支持科学计算。实际上计算机起初是为了战争而开发的,计算导弹的轨道...
后来随着计算机的发展,计算机开始支持文字,最先支持的文字是英文,英文对应的字符编码方式是ASCII码。
ASCII码采用1byte进制存储,因为英文字母是26个。(键盘上所有的键全部算上也超不过256个,1byte可以表示256种不同的情况。所以英文本身在计算机方面就占有优势)
'a' --(采用ASCII码进行编码)--> 01100001
01100001 --(采用ASCII码进行解码)--> 'a'
如果编码和解码采用的不是同一个编码方式,会出现乱码。
'A' ---> 65
'0' ---> 48 (这个'0'不是那个0,是文字'0')
随着计算机语言的发展,后来国际标准组织制定了ISO-8859-1编码方式,又称为latin-1编码方式,向上兼容ASCII码。但不支持中文。
后来发展到亚洲,才支持中文,日文,韩文...
中文这块的编码方式:GB2312 < GBK GB18030 (容量关系),这三种编码方式是简体中文。
繁体中文:big5(台湾使用的是大五码)
在java中,java语言为了支持全球所有文字,采用了一种字符编码方式叫做unicode编码。uninode编码统一了全球所有的文字,支持所有的文字。
具体的实现包括:UTF-8/UTF-16/UTF-32
需要记住:
ASCII
ISO-8859-1(latin-1)
GB2312
GBK
GB18030
Big5
unicode(utf8/utf16/utf32)
2 几种基本数据类型详解
2.1 字符型char
CharTest01.java
/*
字符型
char
1、char占用2个字节。
2、char的取值范围: [0 ~ 65535]
3、char类型的字面量使用单引号括起来。
4、char可以存储一个汉字。
*/
public class CharTest01{
public static void mian(String[] args){
// char可以存储一个汉字吗?
// 可以的,汉字占用2个字节,java中的char类型占用2个字节,正好
char c1 = '中';
char c2 = 'a';
// 0如果加上单引号的话,0就不是数字0了,就是文字0,它是1个字符。
char c3 = '0';
char c4 = '龘';
// 错误:不兼容的类型:String无法转换为char
// char c4 = "a";
// 错误:未结束的字符文字
// char c5 = 'ab';
}
}
CharTest02.java
/*
关于java中的转义字符
java语言中"\"负责转义。
\t 表示制表符tab
*/
public class CharTest02{
public static void main(String[] args){
// 普通't'字符
char c1 = 't';
System.out.println(c1);
// 根据之前所学,以下代码应该报销。
// 经过测试以下代码 \t 实际上是1个字符,不属于字符串
// 两个字符合在一起表示一个字符,其中 \t 表示“制表符tab”
char c2 = '\t'; // 相当于键盘上的“tab键”
System.out.println("abcdef");
System.out.println("abctdef");
// \的出现会将紧挨着的后面的字符进行转义。\碰到t表示“tab键”
System.out.println("abc\tdef");
/*
System.out.println(); 换行
System.out.print(); 不换行
*/
System.out.print("xiaohong");
System.out.println("HelloWorld");
System.out.print("abc");
System.out.println('\n'); // '\n'换行符
System.out.pirntln("def");
// 假设现在想在控制台输出一个 ' 字符怎么办?
// 错误:空字符文字
// System.out.println(''');
// \' 表示一个普通的单引号字符
System.out.println('\'');
// 假设现在想在控制台输出一个 \ 字符怎么办?
// 错误:未结束的字符文字
// System.out.println('\');
// 在java中两个反斜杠代表了一个“普通的反斜杠字符”
System.out.println('\\');
// 双引号的括起来的是字符串
System.out.println("test");
// 希望输出的结果是:"test"
// 错误:需要')'
// System.out.println(""test"");
System.out.println("“test”"); //内部的双引号可以用中文的。
System.out.println("\"test\"");