一直不是很了解Byte和char的。查找了很多资料之后终于对java的基本数据类型有可一个大致的总结
一、数据之间的转换
按照java类型之间的转换顺序如下
byte---->short(char)---->int---->long---->float---->double
按照上述顺序总结如下:
1、数据类型可以从左边自动转换到右边的类型
2、数据类型从右边转换成左边的类型时,必须要进行强制转换,且转换时会丢失部分信息
二、Byte和char之间的区别
byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127 。char 是字符数据类型 ,是无符号型的,占2字节(Unicode码 );大小范围 是0—65535 ;char是一个16位二进制的Unicode字符,JAVA用char来表示一个字符 。
1、Char是无符号型的,可以表示一个整数,不能表示负数;而byte是有符号型的,可以表示-128—127 的数
char c = (char) -3; // char不能识别负数,必须强制转换否则报错,即使强制转换之后,也无法识别
System.out.println(c);
byte d1 = 1;
byte d2 = -1;
byte d3 = 127; // 如果是byte d3 = 128;会报错
byte d4 = -128; // 如果是byte d4 = -129;会报错
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
System.out.println(d4);
结果为:
?
1
-1
127
-128
2、char可以表中文字符,byte不可以,如
char e1 = '中', e2 = '国';
byte f= (byte) '中'; //必须强制转换否则报错
System.out.println(e1);
System.out.println(e2);
System.out.println(f);
结果为:
中
国
45
3、对于同一种类型,输出结果不一样
public class Print_Test {
public static void main(String[] args) {
char c = (char) 2354;
System.out.println(c);
char c1 = (char) 2354;
System.out.println(+c1);
char c2 = (char) 2354;
System.out.println(' '+c2);
}
}
输出结果:
?
2354
2386
出现上述结果是因为在java里面很重要的一个特性就是多态,这里System.out.pringln();虽然看上去都是调用同一个方法,但是在实际情况下,System.out.pringln()实现了方法的重载,于是就出现了:
System.out.pringln(c),调用的是System.out.pringln(char c);
System.out.println(+c1)和System.out.println(' '+c2),调用的是System.out.println(int x);
这样调用同一个方法,同一个变量值但不同类型,可能出现不同的值。因为它们实际调用的是不同的方法。
4、char的算术运算结果和字节型运算结果不一样
char firstChar='中';
int intChar=firstChar+1;
char LastChar=(char) intChar;
System.out.println("char:"+LastChar);
以上的运行结果如下
char:丮
firstchar+1,获取的是Unicode表中的下一个字符,所以输出的是一个字符型的字符,这和字节型的数据+1是完全不相同的两个结果
总结
1、char是无符号型的,可以表示一个整数,不能表示负数,而byte是有符号型的,可以表示-128至127的一个数
2、char可以表示中文,byte不可以
3、字符型的常量也可以用16进制编码方式表示,范围是'\u0000'-'\uFFFF',一共可以表示65536个字符,其中前256个字符('\u0000'-' \uFFFF')和ASCII码中的字符完全重合。
不仅如此,字符型的值也可以作为整数型来使用,但它是无符号整数,但他是一个16位的无符号整数,表示范围0----65535,
如果把一个0----65535内的int型整数赋值给char类型的变量,系统会自动把这个int型整数当成char类型来处理。
4、如果对基本数据类型执行算术运算或按位运算,大家会发现只要类型比int小(即char,byte,或者short),那么在运算之前,这 些值会自动转换成int, 这样一来,最总生成的结果就是int类型。如果想把结果赋值给较小的类型,就必须使用类型转换(既然 把结果赋值给了较小的类型,那就可能出现信息丢失)。
通常,表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。
如果将一个float值与一个double值相乘,结果就是double;如果将一个int和一个long值相加,则结果为long