(1)内存分配
- 寄存器: 在运算器内部,运行速度非常快,但是你不能控制。
- 栈(stack): 在RAM内,存放变量。
- 堆(heap): 在RAM内,存放对象。速度比stack要慢
- 常量 : 常量值直接存储在程序代码内部,这样做是安全的,因为它的值永远不会改变
- 非RAM存储: 数据完全存活于程序之外。例如:流对象和持久化对象。
(2)基本数据类型
基本数据类型 | 大小 | 最小值 | 最大值 | 包装类型 | 默认值 |
---|---|---|---|---|---|
boolean | - | - | - | Boolean | false |
char | 16-bit | Unicode 0 | Unicode (2^16)-1 | Character | ‘\u0000’(null) |
byte | 8-bit | -128 | 127 | Byte | (byte)0 |
short | 16-bit | -2^15 | (2^15)-1 | Short | (short)0 |
int | 32-bit | -2^31 | (2^31)-1 | Integer | 0 |
long | 64-bit | -2^63 | (2^63)-1 | Long | 0L |
float | 32-bit | IEEE 754 | IEEE 754 | Float | 0.00f |
double | 64-bit | IEEE 754 | IEEE 754 | Double | 0.00d |
void | - | - | - | Void |
高精度使用BigInteger 和 BigDecimal
java中的数组
java中的数组在运行时会进行下标检查,所以不会出现数组越界的情况。
副作用
对于一个表达式,它的效果分为两部分——结果和副作用。
结果就是表达式的值,比如1+1得结果就是2。
副作用是表达式除了产生结果以外产生的其他效果。比如i++,结果i原来的值,副作用是给i的内容+1。
短路
常数表示
int i = 11;
long l = 22L;
float f = 33.0F;
//小数默认是double类型
double d1 = 44.44;
double d2 = 55.55D;
/**
* 十六进制
* 0x ==> ‘零X’开头表示十六进制整数
*/
int hexadecimal = 0X1000;
/**
* 八进制
* 0 ==> 零开头表示八进制小数
*/
int octonar = 01000;
/**
* 1.39e-43 ==> 表示1.39 * 10^43
* 注意:
* 在java中, e 代表10的幂次
* 在数学中,e代表2.718.....
*/
double scientific = 1.39e43;
按位运算符 & | ^
移位运算符
待补充
类型转换
- 扩张类型
int – > double
int – > float
等等
不用强制转换,因为新的数据类一定能够容纳久的数据类型 - 窄化转换
double –> int
double –> float
等等
必须进行强制转换,因为新的类型可能无法容纳那么多信息,可能照成数据丢失。
截尾
浮点数转化为整型值会进行结尾取值,即小数点后的值全部抛弃
double above = 0.7;
double below = 0.3;
float fabove = 0.7f;
double fbelow = 0.3f;
System.out.println((int)above); // ==> 0
System.out.println((int)below); // ==> 0
System.out.println((int)fabove); // ==> 0
System.out.println((int)fbelow); // ==> 0
四舍五入
四舍五入需要使用java.lang.Math.round()方法
提升
(1)对基本数据类型执行算数运行或按位运算,只要类型比int小(即byte和short和char),那么在运算之前,这些值会全部转化为int,最终结果也是int,如果把这些值付给较小的类型,就必须使用强制类型转换。可能造成数据丢失。
char c = 'a';
char cc = (char) +c; // +c 已经是int类型的了
(2)表达式出现的最大的数据类型决定了表达式最终结果的数据类型。
注意
- char,byte,short提升为int,然后再转化成较小类型,有可能造成数据丢失。
- int 与 int 相乘不用进行类型转换,但是有可能造成溢出,所以也要小心。
int i = 1000000000 * 2000;
System.out.println(i); // --> -1454759936
问题
(1)对基本数据类型执行算数运行或按位运算,只要类型比int小(即byte和short和char),那么在运算之前,这些值会全部转化为int,最终结果也是int,如果把这些值付给较小的类型,就必须使用强制类型转换。可能造成数据丢失。
怎么截取数据的?????