程序设计语言基础

程序设计语言

类型检查

  • 编译时:C, C++, Java, Go
  • 运行时: Python, Perl, JavaScript, Ruby

运行/编译

  • 编译为机器代码运行:C, C++
  • 编译为中间代码,在虚拟机运行: Java, C#
  • 解释执行: Python, Perl, JavaScript

编程范式 Programming Paradigm

  • 面向过程: C, Visual Basic
  • 面向对象: Java, C++, C#, Scala
  • 函数式: Haskell, Erlang

数据类型和补码

数据类型

  • boolean, byte, char
  • short, int, long, float, double
  • String, Enum, Array
  • Object…

补码

  • 32位int 范围 -2^31 ~ 2^31 -1
    11000...0     -2^32
    21111...1     -1
    30000...0     0
    40111...1     2^31-1
    5
    6-1 + 1 = 0
    

浮点数与定点数

浮点数 (+/-)1.XXXXXX * 2^y

  • 符号位| 指数部分 | 基数部分
  • 64 位double 范围: +/- 10^308
  • 64 位double 精度: 10^15 15位有效小数位

浮点数比较

  • a == b?
  • Math.abs(a-b) < eps
  • 使用BigDecimal 算钱 定点数

Java 拆箱与装箱

Primitive type vs Object

  • primitive type: int, long 值类型, 可以用a = b 去判断
  • Object: Integer, Long, Float, String 引用类型, a == b 判断是否为同一个Object, 用a.equals(b) 或者 Object.equals(a,b)][a 可以为 null]判断值是否相等。 Boxing and Unboxing
  • Integer a = 2; // Boxing
  • Integet b = new Integer(2); // Boxing
  • int v = a.intValue();
1new Integer(2) ==2;  // true  自动拆箱
2new Integer(2) == new Integer(2); // false
3Integer.value(2) == Integer.value(2); // true  系统分配的箱子 IntegerCache.low  IntegerCache.high (-128 127)
4Integer.value(2).intvalue() == 2; // true
5new Integer(2).equals(new Integer(2)) // true