转义字符
转义字符出现在特殊字符之前,会将特殊字符转换成普通字符
\n 换行符
\t 制表符
’ 普通的单引号
\ 普通的反斜杠
" 普通的双引号
java语言当中的“整数型字面值”被默认当做int类型来处理,要让这个“整数型字面值”被当做long类型来处理的话,需要在“整数型字面值”后面添加l / L,建议使用大写L
java语言当中的整数型字面值有三种表示方式:
第一种:十进制(是一种缺省默认的方式)
第二种:八进制(在编写八进制整数型字面值的时候需要以0开始)
第三种:十六进制(在编写十六进制整数型字面值的时候需要有0x开始)
long z = 2147483648
编译错误:过大的整数:2147483648
2147483648被当做int类型4个字节处理,但是这个字面值超出int类型范围
解决:2147483648字面值一上来就当做long类型来处理,在字面值后面添加L
2147483648L是8个字节的long类型
z是long类型变量,以下程序不存在类型转换
long x = 456;
System.out.println(x);
456整数型字面值被当做int类型,占用4个字节
x变量在声明的时候是long类型,占用8个字节
int类型的字面456赋值给long类型的变量x,存在类型转换
int类型转换成long类型
int类型是小容量,long类型是大容量
小容量可以自动转换成大容量,称为自动类型转换机制
long x = 100L;
100L是long类型字面值
x是long类型变量
不存在类型转换,直接赋值
int y = x;
x是long类型,8个字节
y是int类型,4个字节
编译报错,大容量不能直接赋值给小容量
大容量转换成小容量,需要进行强制类型转换、
强制类型转换需要加“强制类型转换法”
加上强制类型转换符之后编译通过了,但是运行阶段可能损失精度
所以强制类型转换谨慎使用,因为损失精度之后可能损失很严重
int y = (int)x;
System.out.println(y);100
强转原理:100=64+32+4(01100100)
原始数据:00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100
强转之后的数据:00000000 00000000 00000000 01100100
将左边的二进制砍掉(所有的数据强转的时候都是这样完成的)
long k = 2147483648L;
int e = (int) k;
System.out.println(e);损失精度严重,结果是负数:-2147483648
原始数据:00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000
强转之后的数据:10000000 00000000 00000000 00000000
10000000 00000000 00000000 00000000(是一个补码形式)目前存储在计算机内部,计算机存储数据都是采用补码的形式存储
byte b = 50;
byte c = 127;
依据目前所学内容,以上程序是无法编译通过
理由:50是int类型的字面值,b是byte类型的变量,显然是大容量int转换成小容量byte
大容量转换成小容量是需要添加强转类型转换符的,以上程序没有添加强转符号,所以编译报错
但是,在实际编译的时候,以下代码编译通过了,这说明:java语言当中,当一个整数型字面值没有超出byte类型取值范围的话,该字面值可以直接赋值给byte类型的变量
byte b1 = 128;
编译报错,128这个int类型的字面值已经超出了byte类型的取值范围,不能直接赋值给byte类型的变量
byte b1 = (byte)128: -128
纠正错误,需要使用强制类型转换符,但是一定会损失精度
原始数据: 00000000 00000000 00000000 10000000
强转之后:100000000(这是存储在计算机内部的,这是一个补码)
补充一下补码的知识:
正整数的补码是其二进制表示,与原码相同
负整数的补码将其对立正数二进制表示所有位取反后加1
比如:-5 ——>+5(00000101) ——>11111010 ——>11111011
原始数据:00000000 00000000 00000000 11000110
强制类型转换后:11000110
11000110现在计算机当中存储,它是一个补码,将补码转换成原码就是该数字
11000110 - 1 ——>11000101
取反:00111010(2+8+16+32)——>58
byte m = (byte)198;(11000110)
System.out.println(m); -58
short s = 32767; 通过
short s1 = 32768 编译报错
65535是int类型,4个字节
cc是char类型,2个字节
按照以前所学知识点来说,以下程序是编译报错的
char cc = 65535; 通过
cc = 65536; 编译报错
当一个整数字面值没有超出byte,short,char的取值范围
这个字面值可以直接赋值给byte,short,char类型的变量
这种机制SUN允许了,目的是为了方便程序员的编程
注意:学到这里,大家一定要知道每一种数据类型的取值范围以及占用字节!