第3章_操作符_直接常量,类型,转换总结
Jun062013
总结:
- 111 这样的 表示int
- 1.5 这样的表示 double
- 给变量赋值不能超过其范围,比如一个byte变量aByte=222;不能通过编译
- 0123 这样的以0开头的整形表示 8进制
- 0xABCF 这样的以0x开头的表示 16进制
- 1.5F这样的表示 float的,也可以是 100F(涉及到自动转换了)
- 1.5D表示double类型的,也可以这样100D
测试代码:
package test.type; /** * 基本类型有以下四种: * * int长度数据类型有:byte(8bits) short(16bits) int(32bits) long(64bits) * * float长度数据类型有:单精度(32bits float)、双精度(64bits double) * * boolean类型变量的取值有:ture、false * * char数据类型有:unicode字符,16位 * * 对应的类类型:Integer、Float、Boolean、Character、Double、Short、Byte、Long */ public class TestType { public static void main(String[] args) { /** * byte(8bits),范围-2^8 ~ 2^7 即, -128 ~ 127 */ byte aByte = 1; //aByte = aByte + 1; /** * 上面这句编译出错,提示 不能把整形转换为 byte,因为 这里的1 是一个直接常量 1 默认是整形的(int) * 一个 int 和 一个 byte 相加 会自动提升 结果为 int的. * 即,向范围大的类型转 */ aByte = (byte) (aByte + 1); //使用强制转换时可以的 System.out.println(aByte); // 输出 2 aByte = (byte) (aByte + 129);// 超过byte范围的强制转换 结果就不对了 System.out.println(aByte); // 输出 -125 aByte++; //这样的可以执行 System.out.println(aByte); // 输出 -124 aByte+=1; //这样也可以 System.out.println(aByte); // 输出 -123 aByte = 0; for(int i=0;i<128;i++) //加了128次,超过byte范围,结果也不对了. { aByte++; } System.out.println(aByte); // 输出 -128 aByte = 0; for(int i=0;i<128;i++) //加了128次,超过byte范围,结果也不对了. { aByte+=1; } System.out.println(aByte); // 输出 -128 //aByte = 129; //这句报错, byte最大127,这里超范围赋值是不行的 /** * short(16bits),范围 -2^16 ~ 2^15,即-32768 ~ 32767 */ short aShort = 0; //相关操作同上面byte的测试 /** * int(32bits),范围 -2^32 ~ 2^31,即-2 147 483 648 ~ 2 147 483 647 */ int aInt = 0; //相关操作同上面byte的测试 /** * long(64bits) 范围 -2^64 ~ 2^63,即-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 */ long aLong = 0; //这个0,是一个直接常量,其实是一个int ,以为long比int范围大,这样赋值没问题 aLong = 100L; //这个 100L在数字后面加上L表示long类型 /********************************************************************************************/ /** * float(32bits) 范围大约 ±3.402 823 47 E±38(有效位 6~7位) */ float aFloat = 0; //0这个直接常量 其实是一个int,这里自动将int 转成float了,因为float比int 范围大 System.out.println(aFloat); // 输出0.0 aFloat = 1.5F; // 这里1.5F 是一个直接常量, 在一个浮点数后面加一个F表示flaot //aFloat = 2.5; // 这样 不对,因为 2.5 这个直接常量 默认是 double的, aLong = 999L; aFloat = aLong; //这样可以, 因为aLong也是32bits的,但是这里自动转换了 aLong 自动变成 aFloat了 System.out.println(aFloat); // 输出999.0 /** * double(64bits) 范围大约 ±1.797 693 134 682 315 70 E±308(有效位 15位) */ double aDouble = 123; //123这个直接常量 其实是一个int,这里自动将int 转成doble了,因为doubl比int 范围大 System.out.println(aDouble); // 输出123.0 aDouble = 119.025D; //119.0D 这个直接常量表示 一个double的 System.out.println(aDouble); // 输出 119.025 aInt = 123456; aDouble = aInt; // 可以这样赋值 System.out.println(aDouble); // 输出 123456.0 aFloat = 222.11F; //这里 F必须要有的,因为 光光的222.0其实是一个double,不能赋给float aDouble = aFloat; System.out.println(aFloat); // 输出 222.11,注意这里是float,看起来还比较正常(是正常赋值) System.out.println(aDouble); // 输出222.11000061035156, 222.11F这个float动态转换成 double后,精度变了 aDouble = 222.11D; // double 正常赋值呢? System.out.println(aDouble); // 输出 222.11, 正常了 /********************************************************************************************/ /** * char 表示单个字符.是Unicode编码的,范围是\u0000 到 \uffff * 采用的是UTF16编码, * 关于字符和编码和char,参见单独文章: * http://jackyin5918.iteye.com/blog/1883383 */ char aChar = '\u005D'; System.out.println(aChar); //输出 [ aInt = 0; for(char c='\u0000';c<'\uffff';c++) { aInt++; } System.out.println(aInt); // 输出 65535 /**********************************************************************************************/ aInt = 010;// 0 开头的表示8进制数 System.out.println(aInt); // 输出 8 (转换成10进制的了) aInt = 0x10;// 0 开头的表示 16 进制数 System.out.println(aInt); // 输出 16 (转换成10进制的了) //没有 可以表示 二进制的符号 比如 101010B这样的 System.out.println(Integer.toHexString(aInt)); //将一个整转换 为 16进制 数, 然后输出 10 System.out.println(Integer.toBinaryString(aInt)); //将一个整转换 为 8 进制 数, 然后输出 10000 System.out.println(Integer.toOctalString(aInt)); //将一个整转换 为 2 进制 数, 然后输出 20 } }
赞 赏
微信赞赏 支付宝赞赏