菜鸟养成记--Java篇(一)类型转换
银行业务怎么表示?
不能够用浮点数表示,浮点数是一个约数,应当用专门的类去表示银行数据,要符合银行数据的特点,浮点数在计算机中是以二进制的形式存储和表示的,对于一些十进制小数,如 0.1,无法用有限的二进制位精确表示,会产生舍入误差。
Java中有BigDecimal,这些数据类型通常会有专门的算法和存储方式来确保高精度的计算和存储。
相同对象与常量池对象
public class StringComparisonExample {
public static void main(String[] args) {
// 使用 new 关键字创建字符串对象,会在堆内存中开辟新的空间
String sa = new String("hello world");
String sb = new String("hello world");
// 使用 == 比较对象的内存地址,由于 sa 和 sb 是堆中不同位置的对象,所以输出 false
System.out.println("使用 new 创建的 sa 和 sb 用 == 比较: " + (sa == sb));
// 通过直接赋值的方式创建字符串对象,字符串会存放在字符串常量池中
String sc = "hello world";
String sd = "hello world";
// 由于 sc 和 sd 指向常量池中的同一个字符串对象,所以输出 true
System.out.println("直接赋值创建的 sc 和 sd 用 == 比较: " + (sc == sd));
// 原代码中这里可能是误写,比较 sa 和 sd,由于一个在堆一个在常量池,输出 false
System.out.println("使用 new 创建的 sa 和直接赋值创建的 sd 用 == 比较: " + (sa == sd));
}
}
类型转换
Java是强类型语言,运算中,不同类型先转换成同一语言,再进行计算。。
类型转换的优先级
低 byte -> short -> char -> int -> long -> float -> double 高
强制类型转换与自动类型转换。
高优先级向低优先级转换时,为强制转换:
double doubleValue = 3.14;
int intValue = (int) doubleValue;
自动类型转换:
//低精度类型可以自动转换为高精度类型
byte byteValue = 10;
int intValue = byteValue;
类型转换时发生的内存溢出
int i = 128;
byte b =(byte)i;
//>>>b=-1
b输出-1,因为byte最大是127,发生内存上溢,因此在操作比较大的数进行类型转换过程中,就要避免溢出的数。
注意事项
bool值不可以参与强制类型转换;
转换时会吃此案精度问题。