基本数据类型
Java中定义了4类,共8种基本的数据类型:

  • 整数型:byte、short、int、long
  • 小数型:float、double
  • 字符型:char
  • 布尔型:boolean

注意:只有成员变量才有默认值,局部变量必须显示赋值

booleanlx

  • 通常用于逻辑运算和程序流程控制
  • 该类型的值只能是true 或 false ,表示真或假
  • 不能使用0和非0的整数来替代false 和 true ,区别与 C 语言
  • false 和 true 是 boolean 的常量(字面量)

byte、short、int、long

整型常量的四种表示形式:

  • 二进制整数:0B 或 0b 开头(Java7的新特性),如: int a = 0B110;
  • 八进制整数:要求以0开头,如: int a = 012;
  • 十进制整数:如:int a = 10;
  • 十六进制整数:要求 0X 或 0x 开头,如: int a = 0x12;

Java语言的整型常量默认是int型,声明long 下变量后加上'l'或者'L',建议使用大写L。

foat、double类型

都能表示小数类型(浮点类型),其中float 表示单精度类型 ,double 表示双精度类型,但是二者都不能表示精确的小数。

Java的浮点类型常量有两种表现形式:

  • 十进制形式:如 3.14、168.0、0.618
  • 科学计数法形式(返回double):;例如:3.12e2、3.14E2、100E-2

Java浮点型常量默认是double ,若要声明一个常量为float 型,则需在常量后加上'f' 或 'F',double 常量后面的'D' 或'd'可省略。

char类型

表示16位的无符号整数或者Unicode字符,Java对字符采用Unicode字符编码。

Unicode收集了世界上所有语言文字中的字符,是一种跨平台的编码方式,Java的字符占两个字节,可以表示一个汉字。

char常量有3种表示形式:

  • 直接使用单个字符来指定字符常量,格式如'a'、'8';
  • 直接作为整数类型使用,但是数据范围在[0,65535],如97打印出来是a;
  • 使用十六进制的数值表示,格式如'uX',X表示十六进制整数,如'u0061';

引用数据类型
除了8种基本数据类型,其他所有的类型都是引用数据类型,包括类、接口、数组。引用数据类型默认初始值都是null

String

String 是一个类,表示字符串。字符串都得使用""括起来,连接字符串使用“+”符号。

数据过长和溢出

当要表示的数据超出类型的临界范围时,称为溢出。溢出情况发生时程序并没有做数据范围检查处理,此时会出现数据紊乱情况。

自动类型转换

boolean类型不能转换为其他数据类型。

当把小数据范围类型的数值或变量赋给另一个大范围数据类型变量,系统可以完成自动类型转换。

整型、字符型、浮点型的数据在混合运算中相互转换,转换时遵循以下原则:

正方向:byte、short、char --> int --> long --> float -->double

正反方,小类型到大类型的转换会自动完成,自动类型转换也称为“隐式类型转换”。byte、short、char 之间不会相互转换,他们在计算时首先会转换为int类型。

注意:若直接把一个较小的整数常量(byte、short、char范围内)赋给一个byte 或 short 或 char 变量,系统会自动把这个整数当作是 byte 或 short 或 char 类型,也就是存在隐式转换。

强制类型转换

反方向:byte、short、char <-- int <-- long <-- float <-- double

当把大范围类型的数值或变量赋给另一个小范围类型变量时,此时系统不能自动完成转换,必须加上强制转换符才能完成转换,该操作可能造成数据精度的降低或溢出,所有使用时要格外注意。

强制类型转换,也称为“显式类型转换”,这种转换肯能造成溢出和精度损失。

表达式类型的自动提升

当一个算数表达式中包含多个基本数据类型(boolean除外)的值时,整个算数表达式的数据类型将在数据运算时出现自动提升,其规则是:

  • 所有的byte、short、char类型被自动提升到int类型;
  • 整个表达式的最终结果类型被提升到表达式中类型最高的类型。

运算符

算术运算符

加号:在操作数值、字符和字符串时其结果时不同的,当两个字符相加得到的是ASCII码表值,当两个字符串相加时表示将两个字符串连接在一起,从而组成新的字符串。

除号:整数在使用除号操作时,得到的结果仍为整数(小数部分忽略),当整数除0时会引发算术异常。

取模:模数的符号忽略不计,结果的正负取决于被模数,Java还支持小数之间的取模,若一个整数和0.0 或一个小数和 0 取模,结果是NAN(Not A Number).

自增:++,递增操作符,使值增加1,有前置和后置之分,只能操作变量
自减:--,递减操作符,使值递减1,有前置和后置之分,只能操作变量

代码 result++ 和 ++result ,都将使 result 变量的值加1。唯一的区别是:前置的(++result)表示对 result 加 1 之后的结果进行运算,而后置的表示对变量加1之前的值(原始值)进行运算。如果只是执行某个变量的递增操作,那么选用 result++ 或 ++result 都可以。

赋值运算符

专门为变量指定值或重新指定值。

加等于: x += 5 相当于 x = x + 5,但还包括隐式类型转换。

比较运算符

用于比较两个变量直接的关系,比较运算符的结果是 boolean 类型。

表达式格式:boolean result = 表达式A 比较运算符 表达式B;

逻辑运算符

表达式格式:boolean result = 表达式A 逻辑运算符 表达式B;

&:表示并且,当操作数A和B都为true 时结果 result 才为 true,否则 result 为 false;
&&:结果和&一样,具有短路效果:如果左边操作数A是false ,result 一定为 false,且不运算表达式B。

注意:Java中不可以 写成 3 < x <6,而应该写成 x > 3 && x < 6;

三元运算符

X ? Y : Z;

三元运算符,表示有三个元素参与的表达式,所以又称为三目运算符,其语义表示if-else.
语法格式:X ? Y :Z, 其中x为boolean类型表达式,先计算X的值,若X结果为true则整个三目运算表达式的结果是Y,否则就是Z。三目运算符结果的类型由Y和Z决定。(Y 和 Z类型相同)

位运算符

待补充......

运算操作优先级

类似于数学中的规则。在实际项目中尽量写简单的表达式,遇到算术符优先级的问题优先使用括号解决。

赋值符号都是从右往左运算的。

标签: 数据类型, byte, short, int, long, float, double, char, boolean, 转换, 类型转换, 赋值, 比较, 逻辑, 三元