46-53字符类型/编码/布尔类型/自动类型转换

一、字符类型Char

字符类型Char
字符类型可以表示单个字符,字符类型是char,char是两个字节,可以存放汉字,多个字符
我们使用字符串String。
注意:字符类型可以直接存放一个数字
Sublime Text3快捷键大全:
https://pan.baidu.com/s/1TG2eWiiERkNVFai89mi6HA?pwd=wkab
快捷键是可以修改的。
char c1 = 'a';
char c2 = '\t';
char c3 = '好';
char c4 = 97;  // 这里直接输出,输出的也是a,这里涉及到编码的概念

image
在提供的快捷键大全中找到指定的快捷键组合,在按键绑定-默认这个文件中Ctrl F搜索,找到之后复制这一行,然后打开按键绑定-用户,将刚才复制的粘贴过来,然后更改快捷键组合即可。

字符类型使用细节
1、字符常量是使用单引号''括起来的单个字符。例如char c1 = 'a'; char c2 = '中';
char c3 = '9';
2、Java中还允许使用转义字符,\来将其后的字符转变为特殊字符型常量。例如:char c3 = '\n';
这被当成是一个字符,一个换行符。
3、在Java中,char的本质是一个整数,在输出的时候,是unicode码对应的字符。
http://tool.chinaz.com/Tools/Unicode.aspx
4、可以直接给char赋一个整数,然后输出时,会按照对应的unicode字符输出。
5、char类型是可以进行运算的,相当于一个整数,因为它有对应的Unicode码。

// 在Java中,char的本质是一个整数,在输出时,是unicode码对应的字符
char c1 = 97;
System.out.println(c1);  // a
char c2 = 'a';  // 输出'a'对应的数字
System.out.println((int)c2);  // 97
为什么是97可以看ASCII码表

https://pan.baidu.com/s/1e5Y0u2XwASrIQWaTrCHi9w?pwd=1f59

二、编码

字符类型char
字符类型本质探讨
1、字符类型存储到计算机中,需要将字符对应的码值找出来,比如a字符存储的码值为97,二进制是1100001来存储
读取的时候将二进制转97然后转字符a显示
2、字符和码值的对应关系是通过字符编码表决定的,是规定好的。
3、字符编码表
ASCII,ASCII编码表是使用一个字节表示,一个自己能够表示的二进制有2^8=256种表示字符,但是计算机是美国人发明的
只是表示一些字母和特殊字符以及数字,只需要使用到128个,为了让其他国家能够使用产生Unicode码
Unicode,Unicode编码表,固定大小的编码,使用两个字节来表示字符,字母和汉字统一都是占用两个字节,但是这样
浪费空间。
UTF-8编码表,是大小可变的编码,字母使用1个字节,汉字使用三个字节。
能够表示的字节越多,可以表示的字符种类就越多,当然也越占用空间。
GBK可以表示汉字,而表示的范围广,字母使用1个字节,汉字使用2个字节
gb2312可以表示汉字,gb2312是小于GBK的
big5码一般用于台湾,香港,表示的是繁体中文。

1、ASCII码介绍(了解)

  • ASCII码:上个世界60年代,美国制定了一套字符编码(使用一个字节),对英语字符与二进制位之间的关系,做了统一的规定。
    这被称为ASCII码。ASCII码一共规定了128个字符的编码,只占用了一个字节的后7位,最前面一位统一规定为0。特别提示的是,
    一个字节可以表示256个字符,ASCII码只使用了128个字符。
    缺点是不能表示所有的字符。

2、Unicode编码介绍(了解)

  • Unicode的好处是,一种编码将世界上所有的符号都纳入其中,每一个符号都给予一个独一无二的编码,使用Unicode没有乱码的问题。
    Unicode的缺点是,一个英文字母和一个汉字都占用2个字节,这对于存储空间来说是浪费。
    2的16次方是65536,所以最多编码是65536个字符。
    编码0-127的字符是与ASCII的编码一样。比如a在ASCII码中是0x61,在unicode码中是0x0061,都对应的是97,所以Unicode码
    兼容ASCII码。

3、UTF-8编码介绍(了解)

  • 1、UTF-8是互联网上使用最广泛的一种Unicode的实现方式,是一种改进
    2、UTF-8是一种变长的编码方式。它可以使用1-6个字节表示一个符号,根据不同的符号而变化字节长度。
    3、使用大小可变的编码,字母占用1个字节,汉字占用3个字节

三、布尔类型

基本介绍
	1、布尔类型也叫做boolean类型,boolean类型数据只允许取值true和false,无null
	2、boolean类型占用1个字节。
	3、boolean类型适用于逻辑运算,一般用于程序流程控制。
	if条件控制语句
	while循环控制语句
	do while循环控制语句
	for循环控制语句
布尔类型:boolean
使用细节注意:不可以使用0或者非0的整数代替false和true,这点和c语言不同,只能是false或者是true

四、基本数据类型转换

基本数据类型转换
自动类型转换
	介绍
		当Java程序在进行赋值或者是运算的时候,精度小的类型自动转换为精度大的数据类型,这个是自动类型转换。
		数据类型按照精度(容量)大小排序为:
		char int long float double
		byte short int long float double
int a = 'c'; // char -> int   ok
double d = 80; // int -> double  ok
1、数据类型转换细节一

	当有多种类型的数据进行混合运算的时候,系统首先自动将所有数据转换成容量最大的那种数据类型,
	然后再进行计算
	int n1 = 10;  // int -> int  ok
	// float d1 = n1 + 1.1;  // 错误 n1 + 1.1 结果类型是double,因为1.1是double类型
	// double d1 = n1 + 1.1;  // 对n1 + 1.1 结果类型是double需要使用double类型接收
	// 或者指定1.1是一个float类型
	float d1 = n1 + 1.1F;  // 结果类型就是float类型
	
2、数据类型转换细节二

	当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型的时候,就会报错,反之就会进行自动类型
	转换。
	int n2 = 1.1;  // 错误 如果直接写浮点数默认是一个double类型,double是一个非常大的类型将double赋值给int不行
3、byte,short这一组和char之间不会相互自动转换。

	也就是byte和char之间不会进行相互转换,short和char之间不会相互转换
	当将数赋值给byte的时候,会先判断该数是否在byte范围内,如果是就可以将这个默认的int赋值给byte,short和char同理
	byte b1 = 10;  // int->byte ok,因为10在byte范围内
	char c1 = 98;  // int->char ok,因为98在char范围内
	short s1 = 10;  // int->short ok,因为10在short范围内
	注意:
	当
	int n2 = 1;  // 这个时候n2已经在内存中是以4个字节进行存放了的
	byte b2 = n2;  // 这个时候将4个字节内存大小的放到1个字节大小的byte中显然是不行的
	注意:
	当
	byte b1 = 10;
	char c1 = b1;  // 这个时候b1是1个字节的,虽然能够放到2个字节的char中,但是Java规定
	// 不能进行自动类型转换,而因为char是0-65535只能是正数,而byte是-128到127当然不能进行转换
	// 同理short也是一样。
	// 注意,在C语言中是允许数据进行溢出的,但是在Java中会直接报错。
	// 比如:
	byte b1 = 1000;  // 这个是直接会报错的。
4、byte,short,char 他们三者可以计算,在计算时首先转换为int类型
	byte b2 = 1;
	short s1 = 1;
	short s2 = b2 + s1;
	// 这里byte和short之间进行加法运算,运算的结果是一个int类型,int类型占内存空间4个字节,short占用2个字节
	// 将int赋值给short不行,所以最终导致错误。其实我感觉这个设置是合理的,因为如果是short最大值,byte最大值的话
	// 进行一些运算肯定是会超过short和byte的,到达int的范围,这样设置是没有问题的。
	// 但是比较特别的是byte b4 = b2 + b3;这样的结果也是int,这就有点不太爽了,这个是会报错的。
	// 所以不管是单独运算还是混合运算都是这样。
5、boolean类型是不参与自动类型转换的
	boolean pass = true;
	int num100 = pass;  // boolean类型不能自动转换成int类型
最后再强调一点:
自动提升原则:表达式结果的类型自动提升为操作数中最大的类型
byte b4 = 1;
short s3 = 100;
int num200 = 1;
double num300 = 1.1;
float num500 = b4 + s3 + num200 + num300;
这个是报错的,结果是操作数中最大的类型double,所以一定需要使用double类型来进行接收
posted @ 2025-04-19 21:42  请叫我虾  阅读(33)  评论(0)    收藏  举报