Java类型转换
Java基础数据类型
强类型语言
Java是一种强类型语言
要求变量的使用要严格符合规定,所有变量都必须先定义才能使用 安全性高 但是速度较慢
String name="hello";String 字符串对应字符串类型
Int num=10; Int整型
大小无需特别记忆可以直接看类的源码
弱类型语言
js 变量定义比较随意
Java的数据类型分为两大类
基本类型(primitive type)
数值类型
整数类型
byte:占1个字节范围 -128-127
short:占2个字节范围 -32768-32767
int:占4个字节范围-2147483648-2147483647
long:占8个字节范围-9223372036854775808-9223372036854776807
浮点类型
float:占4个字节
double:占8个字节
字符类型
char:占两个字节
boolean类型
占1位其值只有ture和false
引用类型(reference type)
类
接口
数组
类型转换
因为Java是强类型语言,所以要进行一些运算的时候,需要类型转换
低----------------------------------------------------->高
byte,short,char—>Int—>long—>float—>double
64 32
为什么64位的long会比32位的float小????
因为小数的优先级要大于整数
运算中,不同类型的数据先转化为同一类型,然后进行运算
// 强制转换(类型)变量名 高--低
// 自动转换 低--高
/*
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干类型
3.再把高容量转换到低容量的时候要进行强制类型转换
4.转换的时候可能存在内存溢出,或者精度的问题
*/
int i = 128;
byte b = (byte)i;
System.out.println(i);//128
System.out.println(b);//-128//内存溢出
* 为什么回事-128呢?因为byte的范围在-128-127
* 超出范围就会内存溢出
* byte,short,char—>Int—>long—>float—>double
强制类型转换时的溢出和精度问题
//操作比较大的数时,注意溢出问题
//jdk7的特性,数字之间可以用下划线分隔
int money = 10_0000_0000;
int year = 20;
int total = money*year;
System.out.println(total);//-1474836480,计算的时候溢出了
/**
* 那是不是说我用long就可以解决溢出问题了呢?
* 不不不并不是
* 因为money和year的默认是int,转换之前已经存在问题
* 那如何解决呢?
* 再计算之前把精度问题解决掉
*/
long tatol2 = money*year;
System.out.println(tatol2);//-1474836480
long tatol3 = money*((long)year);//再计算之前把精度问题解决掉
System.out.println(tatol3);//20000000000
进制
二进制0b 八进制0 十进制 十六进制0x
int i = 10;
int i2 = 010;//八进制
int i3 = 0x10;//十六进制 0-9 A~F 16
System.out.println(i);10
System.out.println(i2);8
System.out.println(i3);16
银行业务尽量不用浮点数表示??
- 这是为什么呢?
- 因为浮点数会舍入误差 是一个大约数但是不等于
- 最好完全使用浮点数进行比较
- 那银行业务怎么实现呢?使用BigDecimal 数学工具类
- 要想让数据无误差最好不要用浮点数进行比较
//浮点数拓展 银行业务怎么表示? 钱
//float 有限 离散
//double
float f = 0.1f;//0.1
double d = 1.0/10;//0.1
System.out.println(f==d);//false
float d1 = 1234567f;
float d2 = d1+1;
System.out.println(d1==d2);//true

浙公网安备 33010602011771号