变量要先赋值后使用
- 不给变量赋值代表什么
- 不赋值就使用会怎样 (会报错)
计算并赋值运算符
- 作用是为了让代码更加简洁。比如 a = a + 10,可以简化为 a+=10
- +=
- -=
- *=
- /=
- %=
- &=
- ^=
- |=
- <<=
- >>=
- >>>=
public class CalcAndAssign { public static void main(String[] args) { int a = 16; a >>= 2; System.out.println(a); // 此时a为4 a*=9; System.out.println(a); // 此时a为36 } }
数据类型自动转换
- 自动类型转换
- 不会出现问题的类型转换,编程语言可以做自动类型转换,比如低精度的数字向高精度的数字转换。
- 自动类型转换可以发生在算数运算,也可以发生在赋值。
- 数值精度顺序:double > float > long > int > short > byte
- char 可以转换为 int
- char 可以转换为 int
- 虽然同样是两个 byte,但是因为 char 是无符号数,值域超出了 short 可以表示的范围,所以不可以自动转换为 short。
public class AutoConvert { public static void main(String[] args) { int intVal = 99; long longVal = intVal; long longVal2 = intVal + 1; System.out.println(longVal2); float floatVal = 11.32f; double doubleVal = floatVal; double doubleVal2 = doubleVal * 2; System.out.println(doubleVal2); int a = 99; double b = 5; System.out.println(a/b); char ch = ‘A‘; int chNum = ch; int chNumCalc = ch + 10; System.out.println(ch); System.out.println(chNum); System.out.println(chNumCalc); } }
强制数据类型转换
- 可能出现问题的类型转换,需要使用强制类型转换,比如高精度向低精度数值转换。
- 强制类型转换也是操作符。
- 语法是用小括号括起来的目标类型放在被转换的值前面。
- 强制类型转换会造成数据丢失。
public class ForceConvert { public static void main(String[] args) { int intVal = 99; long longVal = 19999; intVal = (int)longVal; float floatVal = 11.32f; double doubleVal = 3344556.789; floatVal = (float) doubleVal; int A = 65; char b = (char) A; System.out.println(b); } }
public class ForceConvertValueLoss { public static void main(String[] args) { int intVal = 99; long longVal = 5555555555555L; intVal = (int) longVal; System.out.println(intVal); float floatVal = 11.32f; double doubleVal = 1234567890.123456; floatVal = (float) doubleVal; System.out.println(floatVal); System.out.println(doubleVal); } }
数值溢出
- 数值计算一旦溢出,结果将失去意义。比如两个正数会加出负数。(这是因为两个数相加超出了它们所属类型的范围,如果第一位刚好是1,那么就会被计算机认为是负数。)
- 要对能够处理的值有个大概的估计。
public class CalcValueLoss { public static void main(String[] args) { int intVal = 2000000000; System.out.println(intVal + intVal); } }
从数值计算溢出理解程序员和编程语言责任的分界线
- 编程语言的作用
- 编程语言负责按照语法执行
- 编程语言负责和计算机交互
- 程序员的任务
- 程序员负责理解问题
- 程序员负责理解程序,并将问题转换为程序
- 编程语言不负责解决问题,程序员才是负责解决问题的
原文地址:https://www.cnblogs.com/buildnewhomeland/p/12113428.html
时间: 2024-10-01 06:20:59