归类
类型检查
编译时:C,C++,Java,Go
运行时:python,Perl,JavaScript,Ruby
运行/编译
编译为机器代码运行:C,C++
编译为中间代码,在虚拟机上运行,java,C#
解释执行:Python,Perl,JavaScript
编程范式(programming paradigm)
面向对象:Java,C#,C++,Scala
面向过程:C,vb
函数式:Hashkell
数据类型(java)
boolean,byte,char
short,int,long,float,double
String,Enum,Array
Object...
整数类型
32位int的范围?
-2^31 ~ 2^31-1
补码
取反加1
例:-1
0000…1 -> 取反 -> 1111…0 -> +1 -> 1111...1
1000…0 -2^31
1111…1 -1
0000…0 0
0111…1 2^31-1
-1 + 1= 0
1111…1 + 0000…1 = 0000…0
唯一表示0,没有+0,-0
总共表示2^32
浮点数与定点数
浮点数 (+/-)1.xxx*2^y
符号位|指数部分|基数部分
64位double范围:+/-10^308
64位double精度:10^15
浮点数比较
a==b?
Mmath.abs(a-b)<eps?
使用BigDecimal算钱
primitive type vs Object
primitive type(值类型):int,long,float..
Object(引用类型):Integer,Long,Float,String...
值类型,用a==b判断相等
引用类型,用a==b判断是否为同一个Object
用a.equals(b)[这个a需要判断是否为null],或Objects.equals(a,b)判断是否相等
Boxing and Unboxing
Integer a = 2; //boxing
Integer b = new Integer(2); //显示boxing
int v = a.intValue(); //unboxing
new Integer(2) ==2? y
new Integer(2)==new Integer(2)? n
Integer.valueOf(2)==Integer.valueOf(2)? y
Integer.valueOf(1000)==Integer.valueOf(1000)? n 由系统决定,可能相等,可能不想等
Integer.valueOf(2).intValue()==2? y
new Integer(2).equals(new Integer(2))? y