Java数据类型
强类型语言
弱类型语言
Java的数据类型分为两大类
-
基本类型(primitive type) -
引用类型(reference type)
基本类型
引用类型
? ? ? ?//八大数据基本类型
?
? ? ? ?//整数
? ? ? ?int num1 = 1000000000; //最常用
? ? ? ?byte num2 = 20;
? ? ? ?short num3 = 30;
? ? ? ?long num4 = 30L; //long类型要在数字后面加个L
?
? ? ? ?//小数:浮点书
? ? ? ?float num5 = 1.1F; //float类型要在数字后面加个F
? ? ? ?double num6 = 3.141592653;
?
? ? ? ?//字符
? ? ? ?char name1 = 'A';
? ? ? ?//字符串,String不是关键字,是一个类
????????//String name2 = "aaa";
? ? ? ?//布尔值
? ? ? ?boolean flag = true;
? ? ? ?boolean flag1 = false;
字节
进制转换
? ? ? ?//整数拓展 ? 进制 ? 二进制0b ? ? ? ? 八进制0 ? ? ? 十进制 ? ? ? 十六进制0x
? ? ? ?int i = 10;
? ? ? ?int i2 = 0b111; //二进制0b
? ? ? ?//2进制转10进制 2进制: 0b111 十进制:1*2*2+1*2+1=7 = 1*2^2+1*2^1+1
? ? ? ?int i3 = 0121; //八进制0
? ? ? ?//8进制转10进制 8进制: 0x121 十进制:1*8*8+2*8+1=81 = 1*8^2+2*8^1+1
? ? ? ?int i4 = 0x101; //十六进制0x ? 0~9 A-F 16
? ? ? ?//16进制转10进制 ? 16进制: 0x101 十进制:1*16*16+0*16+1=257 = 1*16^2+0*16^1+1
? ? ? ?/**
? ? ? ? * 十进制转2进制
? ? ? ? * 十进制15 15/2=7余1
? ? ? ? * ? ? ? ? 尾数部1 ? ? :1
? ? ? ? * ? ? ? ? 7/2=3余1
? ? ? ? * ? ? ? ? 尾数补1 ? ? :11
? ? ? ? * ? ? ? ? 3/2=1余1 ? :111
? ? ? ? * ? ? ? ? 1直接补 ? ? :1111
? ? ? ? *十进制50 ? 50/2=25
? ? ? ? * ? ? ? ? 尾数补0 ? ? ? ? :0
? ? ? ? * ? ? ? ? 25/2=12余1 ? ? :10
? ? ? ? * ? ? ? ? 12/2=6 ? ? ? ? :010
? ? ? ? * ? ? ? ? 6/2=3 ? ? ? ? ? :0010
? ? ? ? * ? ? ? ? 3/2=1y1 ? ? ? ? :10010
? ? ? ? * ? ? ? ? 1 ? ? ? ? ? ? ? :110010
? ? ? ? *
? ? ? ? */
? ? ? ?/**十进制转8进制
? ? ? ? * 十进制50 50/8=6y2 ? ? :2
? ? ? ? * ? ? ? ? 6 ? ? ? ? ? ? :62
? ? ? ? */
? ? ? ?/**十进制转16进制
? ? ? ? * 十进制50 50/16=3y2 ? ? :2
? ? ? ? * ? ? ? ? 3 ? ? ? ? ? ? :32
? ? ? ? */
?
? ? ? ?/**十进制小数转2进制
? ? ? ? *
? ? ? ? * 十进制0.4
? ? ? ? * 乘二,取整数
? ? ? ? * ? ? ? ? 0.4*2=0.8 ? ? ? :0.0
? ? ? ? * ? ? ? ? 0.8*2=1.6 ? ? ? :0.01
? ? ? ? * ? ? ? ? 0.6*2=1.2 ? ? ? :0.011
? ? ? ? * ? ? ? ? 0.2*2=0.4 ? ? ? :0.0110 小数后面不够八位继续
? ? ? ? * ? ? ? ? 0.4*2=0.8 ? ? ? :0.01100
? ? ? ? * ? ? ? ? 0.8*2=1.6 ? ? ? :0.011001
? ? ? ? * ? ? ? ? 0.6*2=1.2 ? ? ? :0.0110011
? ? ? ? * ? ? ? ? 0.2*2=0.4 ? ? ? :0.01100110 小数后面够八位结束
? ? ? ? */
? ? ? ?/**十进制小数转2进制
? ? ? ? *
? ? ? ? * 十进制111.4
? ? ? ? * 整数部分直接转换 ? ? 111转2进制:1101111
? ? ? ? *小数部分乘二,取整数
? ? ? ? * ? ? ? ? 0.4*2=0.8 ? ? ? :1101111.0
? ? ? ? * ? ? ? ? 0.8*2=1.6 ? ? ? :1101111.01
? ? ? ? * ? ? ? ? 0.6*2=1.2 ? ? ? :1101111.011
? ? ? ? * ? ? ? ? 0.2*2=0.4 ? ? ? :1101111.0110 小数后面不够八位继续
? ? ? ? * ? ? ? ? 0.4*2=0.8 ? ? ? :1101111.01100
? ? ? ? * ? ? ? ? 0.8*2=1.6 ? ? ? :1101111.011001
? ? ? ? * ? ? ? ? 0.6*2=1.2 ? ? ? :1101111.0110011
? ? ? ? * ? ? ? ? 0.2*2=0.4 ? ? ? :1101111.01100110 小数后面够八位结束
? ? ? ? */
? ? ? ?System.out.println(i);
? ? ? ?System.out.println(i2);
? ? ? ?System.out.println(i3);
? ? ? ?System.out.println(i4);
?
浮点数注意事项-最好避免使用浮点数进行比较
-
float
-
表示的长度有限的,离散的 -
有舍入误差 -
大约接近不等于
-
double
需要比较可以使用BigDecimal-数学工具类
float f = 0.1f; ?//0.1
? ? ? ?double d = 1.0/10; ?//0.1
? ? ? ?System.out.println(f==d); ?//结果为:false
? ? ? ?float f1 = 12341241241241241f;
? ? ? ?float f2 = f1+1;
? ? ? ?System.out.println(f1==f2);//结果为:true
字符拓展
?
? ? ? ?/**
? ? ? ? * 字符拓展
? ? ? ? */
? ? ? ?char c1 = 'a';
? ? ? ?char c2 = '中';
? ? ? ?System.out.println((int)c1);//强制转换成int格式
? ? ? ?//输出结果:97
? ? ? ?System.out.println(c1);
? ? ? ?//输出结果:a
? ? ? ?System.out.println((int)c2);//强制转换成int格式
? ? ? ?//输出结果:20013
? ? ? ?System.out.println(c2);
? ? ? ?//输出结果:中
? ? ? ?/**
? ? ? ? * 所有字符本质还是数字
? ? ? ? * 编码表Unicode (97 = a 65 =A) 2字节 0-65536 Excel 2 16 = 65536
? ? ? ? */
? ? ? ?char c3 = '\u0061';//输出结果a
? ? ? ?System.out.println(c3);
? ? ? ?//转义字符
? ? ? ?// \t 制表符,相当于空格
? ? ? ?// \n 换行
? ? ? ?//...
? ? ? ?System.out.println("Hello\tWorld"); //输出结果:Hello World
? ? ? ?System.out.println("Hello\nWorld");//输出结果:Hello
? ? ? ?// ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? World
?
?
? ? ? ?String sa = new String("hello");
? ? ? ?String sb = new String("hello");
? ? ? ?System.out.println(sa==sb);//输出结果:false
? ? ? ?String sc = "hello";
? ? ? ?String sd = "hello";
? ? ? ?System.out.println(sc==sd);//输出结果:true
? ? ? ?//对象 从内存分析
?
//布尔值扩展
? ? ? ?boolean flag = true;
? ? ? ?if (flag) {}
? ? ? ?//上下是一个意思
? ? ? ?if (flag == true) {}
|