目录
1.字符常量用单引号括起来的单个字符,例如 char c1 = 'a'; 双引号表示的是字符串类型
2.JAVA中允许使用转义字符将\后的字符转为特殊字符型常量
3.在JAVA中,char本质是一个整数,在输出时,是unicode码对应的字符
4.即可以给char类型赋一个整数,在输出时会按照对应的unicode字符输出对应字符
5.char类型可以进行运算,本质是一个整数,都有其对应的unicode码
2.byte、short 和 char 之间不会互相自动转换
3.byte、short和char参与计算会自动转变精度为int
5.自动提升原则,表达式结果的类型自动提升为操作数中的最大类型。
2.char类型可以保存int的常量值,但不能保存int的变量值,需要强转
一、字符型的细节
1.字符常量用单引号括起来的单个字符,例如 char c1 = 'a'; 双引号表示的是字符串类型
2.JAVA中允许使用转义字符将\后的字符转为特殊字符型常量
例如 char c1 = 'a';
char c2 = '\n';//换行字符
char c3 = '韩';
char c4 = '\t';//占位
char c5 = 97;
3.在JAVA中,char本质是一个整数,在输出时,是unicode码对应的字符
例如
char c1 = 97;
char c1 = 97;
System.out.println(c1);
char c2 = 'a';
System.out.println(c2);
int c3 = c2;
System.out.println(c3);
可以知道,对于char类型,输出的字符其实本质上是一个int类型的整数,每一个整数对应着一个字符类型。
4.即可以给char类型赋一个整数,在输出时会按照对应的unicode字符输出对应字符
5.char类型可以进行运算,本质是一个整数,都有其对应的unicode码
例如 System.out.println(‘a’ + 10);
结果为 107 注意,此时是单引号的a,不同于双引号的a,如果是双引号的“a”则会输出a10
6.小测试,char c5 = ‘b’ + 1; //’b‘值为98 +1后 此时值为99
System.out.println((int)c5);//99
System.out.println(c5);//99对应的unicode码的字符,即输出c
二、字符类型的本质
1.字符型储存到计算机中需要将字符对应的码值,比如’a‘
储存:’a‘ > 码值 > 二进制 > 存储
读取:二进制 > 97 > ’a‘ > 显示
2.常用的字符编码
ASCII码(128个字符 占一个字节,缺点不能表示所有字符)
Unicode码 (固定大小的编码,使用两个字节来表示字符,字母和汉字统一占用两个字节)
utf-8(大小可变的编码,字母使用一个字节,汉字使用三个字节)
GBK(可以表示汉字,而且范围广,字母使用一个字节,汉字用两个字节)
gb2312(表示汉字的,但范围比GBK小)
big5码(表示繁体字)
三、布尔类型
示例
bollean is pass = true;
if(ispass == trus){
System.out.println(“通过”);}
else {
System.out.println(“没通过”);}
1.使用细节,不可以使用false和true以外的来代替变量的值
四、基本数据类型的转换以及细节
1.自动类型转换
在JAVA中,进行赋值运算时,精度小的类型自动转换为精度大的数据类型,称为自动类型转换
例如 int a = ‘c’; double d = 80;都正确,会自动转换
int a = 'c';
double d = 80;
System.out.println(a);
System.out.println(d);
五、自动类型转换的细节
1.
int n1 = 10;
float d1 = n1 + 1.1;
会报错,因为1.1在java中默认为double类型,而double无法赋予float,考虑改为 double d1 = n1 + 1.1; 或者,float d1 = n1 + 1.1f;
即在使用过程中,将精度大的变量赋值于精度小的会报错。
byte b1 = 10;//可以赋值,byte的值范围在-128~127之间
int n2 = 1;//此时n2是int,在内存中占四个字节
byte b2 = n2;//错误,byte在内存中只占一个字节,byte吃不下int,所以报错
故,在赋值时,考虑赋予的是变量还是具体的值,值在其范围内都可以生效,但变量则需要具体考虑所占的内存大小,或者说精度的大小。(自动数据类型转换会报错,但强制数据类型转换不会,参考6.2)
2.byte、short 和 char 之间不会互相自动转换
byte a = 97; char d = a;//报错,byte不能自动转换成char,同理将short也无法赋值给char。
改为int也会报错,因为int占四个字节,char占两个字节,无法将占用内存大的变量赋值与小的变量,但是可以将byte a = 10;强制转换为int型,然后赋值给char,参考6.2
3.byte、short和char参与计算会自动转变精度为int
byte a = 1;
short b = 1;
short c = a + b;
同类型的byte运算也会转换成int,即在运算中出现这三者都会转换成int,无论是混合还是同类型。
4.布尔类型不参与任何转换
5.自动提升原则,表达式结果的类型自动提升为操作数中的最大类型。
六、强制转换的细节
自动类型转换的逆过程,将容量大的数据转换为容量小的数据类型。使用是要加上强制转换付(),可能造成精度的降低或者溢出
例如 int a = (int)1.9; //此时小数点后会丢失 a = 1;
int b = 2000; byte c = (byte)b;//此时数据会溢出
1.强转符号只对最近的操作有效,往往会使用小括号提升优先级
int x = (int)10*3.5;//会报错,因为逻辑上是对10这个数字进行int转换,3.5仍然是double类型,考虑更改为 int x = (int)(10*3.5);//逻辑上是(int)35.0
2.char类型可以保存int的常量值,但不能保存int的变量值,需要强转
对于5.2,如果想更改错误可以将原代码
byte a = 97; char d = a;
改为
byte a = 97; char d = (char)a;
七、练习
1.错误,9默认为int型;
2.错误,11默认int型,b为byte,无法进行运算
3.正确,可以自动转换为更大的数值
4.错误,在byte与short运算中会自动转换为int