数据类型


基本数据类型(primitive type)



  • 整型:long(8字节) > int(4字节) > short(2字节) > byte(1字节)
  • 浮点:double(8字节) > float(4字节)
  • 用于表示Unicode编码的字符类型:char
  • 表示真假值:boolean类型


数据类型注意点



  • Java无任何符号类型,因为在所有的数值类型所占据的字节数量与平台无关
  • 用于表示溢出和出错的情况的三个特殊的浮点数值:NaN,无穷大,无穷小
  • char类型用于表示单个字符,'A’是编码为65所对应的字符常量,"A"是一个包含字符A的字符串

变量

  • 每一个变量属于一种类型,声明变量所属的类型位于变量名之前
  • 应当逐一声明每一个变量,有助于提高程序的可读性
  • final修饰的变量名称要使用大写

// 变量的声明
int num;
// 变量的初始化
num = 12;

// 变量的声明与初始化放在同一行
int num = 12;
运算符


基本运算符



  • 算术运算符: +,-,*,/
  • 除法运算符:当两个都是整数时表示整数除法,否则表示浮点除法* 整数求余操作(取模):%


浮点计算


double w = x * y / w;

  • 截断计算:intel处理器计算x*y并将结果存储在80位的寄存器中,再除以z并将结果截断为64位
  • 精确计算:直接计算数据并进行存储,没有做截断位的运算
  • 不足:截断运算需要消耗时间,并且计算速度上要比精确计算慢,而精准计算则在不同的intel处理器中计算出来的数据会不一致,因为intel处理器位数不同
  • 截断运算目的就是要保持不同平台操作系统显示的数据是一致,即可移植性


strictfp关键字



  • 采用严格的计算方式:即截断运算,始终在不同平台上显示的数据要保持一致,但是会导致计算溢出
  • strictfp关键字标记的方法或者是类必须使用严格的计算方式来达到理想的结果


自增运算符与自减运算符



  • 前缀自增与自减,n++ or n–
  • 后缀自增与自减,++n or --n

// for instance
int a = 4;
表达式++(a++)的结果是什么? // 你做对了吗???


关系运算符与boolean运算符



  • 比较:==、>=、<=、<、>、!=
  • 逻辑:短路(&&、||)、&、|
  • 三元:condition?expr1:expr2


位运算符


  • 基本运算:与(&)、或(|)、异或(^)、非(~)
// 如果n是一个整型变量,并且用二进制表示的n从右数第m(m >= 1)位为k,k在0-1之间,计算公式为:
int mBit = (n & 2 ^(m-1)) / 2^(m-1)
mBit = k,在0-1之间,可以得到其中第m位的数值


移位运算: >> 与 <<
左移运算符(<<):x << n == x * 2 ^ (n-1)
右移运算符(>>):x >> n == x / 2 ^(n-1)



移位运算注意点


  • n如果是int类型,则需要对n进行模32的运算,即1 << 35 == 1 << 3
  • n如果是long类型,则需要对n进行模64的运算 ,即 1 << 65L == 1 << 1L