Java语言提供了八种基本(内置)类型。
六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
除此之外的(包括String类型)都是引用数据类型。
基本数据类型 我们又分为大概八种:
数据类型 | 名称 | 大小(字节) | 范围 | 默认值 |
byte | 字节型 | 1B | -128 ~ 127 | 0 |
short | 短整型 | 2B | - 32768 ~ 32767 | 0 |
int | 整型 | 4B | -2^31 ~ 2^31-1 | 0 |
long | 长整型 | 8B | -2^63 ~ 2^63-1 | 0 |
float | 单精度浮点型 | 4B | -10^-38~-10^38和10^-38~10^38 | 0.0f |
double | 双精度浮点型 | 8B | -10^-38~-10^38和10^--38~10^38 |
0.0d |
char | 字符型 | 2B | 0 ~ 65535 | 'u0000' |
boolean | 布尔型 | 1/8B | true/false | false |
引用数据类型:
数组类型(array), 枚举类型(enum), 类类型(string ),接口类型(interface)
变量的使用:
使用变量的步骤:
第一步,声明变量, 即根据数据类型在内存申请空间。
数据类型 变量名 int n ;
第二步:赋值,即数据存储至对应内存空间 。
变量名 = 数值 n= 100;
第三步:使用变量,即取出数据使用。
数据类型 变量名 = 数值 int n = 100;
注意:与JS不同,Java是一种强类型的语言,声明时必须强制定义类型,不但
更加安全,也体现了其严谨。
赋值运算符
变量名 = 表达式;
a = b + 1 ; 准确读法:将右边的表达式 b + 1 的值赋给变量a ;
表达式就是符号( 如加号、 减号) 与操作数( 如b, 1等) 的组合 ;
为什么数据有范围?
变量是申请内存来存储值。而每个类型的变量申请的内存大小不尽相同,比如int占4字节,char占2字节 提示:1G=1024M 1M=1024K 1K=1024Byte 1Byte=8bit
二进制
计算机是依靠1和0的开关来通过处理器进行计算的。 二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。
二进制转换
原则 : 除二取余,倒序排列 用数值乘以2的幂次依次相加 。
取值对应:
数据类型 | 大小 | 十进制范围 | 二进制范围 |
byte |
1B | -128 - 127 |
00000000 –11111111 |
short | 2B | -32768 - 32767 |
00000000 00000000 – 11111111 11111111 |
int | 4B | -2^31 – 2^31-1 |
00000000 00000000 00000000 00000000 – 11111111 11111111 11111111 11111111 |
基本数据类型转换:
自动数据类型转换的:
1. 转换前的数据类型与转换后的数据类型是兼容的;
2. 转换后的数据类型比转换前的范围表示大 ;
double d = 3.10; int n = (int)d; //n的值为d转换截取后的值3
String 与基本类型转换
1. String 转Int String str = "100"; //第一种方式 int i = Integer.parseInt(str); //第二种方式 int j = Integer.valueOf(str); 2. Int 转String int i = 100; //第一种方式 String s1 = Integer.toString(i); //第二种方式 String s2 = String.valueOf(i); String与float、long之间转换的方式类同
System.out.println( (int)(char)(byte)-1 ) . 输出 65535
如何解决精度损失问题 : 大数据操作 ;
1 。 Bigdecimal 大浮点数
BigDecimal 解决 (导入Math 包)
实例化 BigDecimal
BigDecimal db = new BigDecimal ( "2.00");
BigDecimal bi = new BigDecimal ( " 1.10");
// BigDecimal 方法的减法方法subtract。
BigDecimal d = bd.subtract( bi );
运算符
i ++ 先用 i 再加1;
++ i 先加1 再用 i;
求值 : i = 1 ;
i ++ + i ++ + ++i + --i + --i = ?
byte a =1; 求 a+=1; 和a=a+1;
a+=1. 包含隐式自动转换, 而a = a+1 ; 则需要强制类型转
a = ( byte) ( a+1);
十 ----->>二 进制转换。
除二取余
二------->> 十 进制转换
乘以2的幂次方
真值
因为第一位是符号位,所以机器数的形式值就不等于真正的
数值。例如上面的有符号数 10000011,其最高位1代表负,
其真正数值是 -3 而不是形式值131(10000011转换成十进
制等于131)。所以,为区别起见,将带符号位的机器数对应
的真正数值称为机器数的真值。
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真
值 = –000 0001 = –1
原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号,
其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的
取值范围就是:
[1111 1111 , 0111 1111],即:
[-127 , 127]
原码是人脑最容易理解和计算的表示方式.
反码
反码的表示方法是:正数的反码是其本身;的反码是在其原
码的基础上, 符号位不变,其余各个位取反。
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数, 人脑无法直观的看出来它
的数值. 通常要将其转换成原码再计算。
补码
补码的表示方法是:正数的补码就是其本身;的补码是在其
原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即
在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的.
通常也需要转换成原码在计算其数值.
位运算符
&和&&的区别
&& 称为 逻辑与 (又称短路与),只要前者条件为假后面条件不会执行。称为遇假则假。
& 称为按位与。 不管第一个条件是否为假,两边都要执行,最终得出结果。
| 和 || 的区别
|| 原理同&& 一样 , 为逻辑或(又称短路或),只要前面为真则就执行, 称遇真则真 。
| 按位或 不管第一个条件是否为真, 两边都要执行,得出最后结果