《疯狂java讲义》学习(1):数据类型与运算符

java数据类型

Java语言是强类型(strongly typed)语言,意思是每个变量和每个表达式都有一个在编译时就确定的类型,所以,所有的变量必须显式声明类型,也就是说,所有的变量必须先声明,后使用。类型限制了一个变量能被赋的值,限制了一个表达式可以产生的值,限制了在这些值上可以进行的操作,并确定了这些操作的含义。
强类型语言可以在编译时进行更严格的语法检查,从而减少编程错误。

java数据类型分类

Java语言支持的类型分为两类:基本类型(Primitive Type)和引用类型(Reference Type)。

  • 基本类型包括boolean类型和数值类型。数值类型有整数类型和浮点类型。整数类型包括byte、short、int、long、char,浮点类型包括float和double。
  • 引用类型包括类、接口和数组类型,还有一种特殊的null类型。所谓引用数据类型就是对一个对象的引用,对象包括实例和数组两种。
  • 空类型(null type)就是null值的类型,这种类型没有名称。因为null类型没有名称,所以不可能声明一个null类型的变量或者转换到null类型。空引用(null)是null类型变量唯一的值。空引用(null)可以转换为任何引用类型。空引用(null)只能被转换成引用类型,不能转换成基本类型,因此不要把一个null值赋给基本数据类型的变量。

基本数据类型

Java的基本数据类型分为两大类:boolean类型和数值类型。而数值类型又可以分为整数类型和浮点类型,整数类型里的字符类型也可以被单独对待。因此常常把Java里的基本数据类型分为4类,8种基本数据类型,值得指出的是,字符串不是基本数据类型,字符串类型是一个类,也就是一个引用数据类型。
《疯狂java讲义》学习(1):数据类型与运算符_第1张图片

整型

通常所说的整型,实际指的是如下4种类型。

  • byte:一个byte类型整数在内存里占8位,表数范围是:-128(-27)~127(27-1)。
  • short:一个short类型整数在内存里占16位,表数范围是:-32 768(-215)~32 767(215-1)。
  • int:一个int类型整数在内存里占32位,表数范围是:-2 147 483 648(-231)~2 147 483 64(7 231-1)。
  • long:一个long类型整数在内存里占64位,表数范围是:-9 223 372 036 854 775 808(-263)~9 223 372 036 854 775 807(263-1)。

int是最常用的整数类型,因此在通常情况下,一个Java整数常量默认就是int类型。除此之外,有如下两种情形必须指出。

  • 如果直接将一个较小的整数常量(在byte或short类型的表数范围内)赋给一个byte或short变量,系统会自动把这个整数常量当成byte或者short类型来处理。
  • 如果使用一个巨大的整数常量(超出了int类型的表数范围)时,Java不会自动把这个整数常量当成long类型来处理。如果希望系统把一个整数常量当成long类型来处理,应在这个整数常量后增加l或者L作为后缀。通常推荐使用L,因为字母l很容易跟数字1搞混。

字符型

字符型通常用于表示单个的字符,字符常量必须使用单引号(’)括起来。Java语言使用16位的Unicode字符集作为编码方式,而Unicode被设计成支持世界上所有书面语言的字符,包括中文字符,因此Java程序支持各种语言的字符。
字符型常量有如下3种表示形式。

  • 直接通过单个字符来指定字符型常量,例如’A’、'9’和’0’等。
  • 通过转义字符表示特殊字符型常量,例如’\n’、’\t’等。
  • 直接使用Unicode值来表示字符型常量,格式是’\uXXXX’,其中XXXX代表一个十六进制的整数。

浮点型

Java的浮点类型有两种:float和double。
double类型代表双精度浮点数,float类型代表单精度浮点数。一个double类型的数值占8个字节、64位,一个float类型的数值占4个字节、32位。
Java语言的浮点数有两种表示形式。

  • 十进制数形式:这种形式就是简单的浮点数,例如 5.12、512.0、.512。浮点数必须包含一个小数点,否则会被当成int类型处理。
  • 科学计数法形式:例如5.12e2(即5.12×102),5.12E2(也是5.12×102)。

除此之外,Java还提供了3个特殊的浮点数值:正无穷大、负无穷大和非数,用于表示溢出和出错。例如,使用一个正数除以0将得到正无穷大,使用一个负数除以0将得到负无穷大,0.0除以0.0或对一个负数开方将得到一个非数。正无穷大通过Double或Float的POSITIVE_INFINITY表示;负无穷大通过Double或Float的NEGATIVE_INFINITY表示,非数通过Double或Float的NaN表示。
必须指出的是,所有的正无穷大数值都是相等的,所有的负无穷大数值都是相等的;而NaN不与任何数值相等,甚至和NaN都不相等。

布尔型

布尔型只有一个boolean类型,用于表示逻辑上的“真”或“假”。在Java语言中,boolean类型的数值只能是true或false,不能用0或者非0来代表。其他基本数据类型的值也不能转换成boolean类型。

直接量

直接量是指在程序中通过源代码直接指定的值,并不是所有的数据类型都可以指定直接量,能指定直接量的通常只有3种类型:基本类型、字符串类型和null类型。

Java支持如下8种类型的直接量:

  • int类型的直接量:在程序中直接给出的整型数值,可分为二进制、十进制、八进制和十六进制4种,其中二进制需要以0B或0b开头,八进制需要以0开头,十六进制需要以0x或0X开头。例如123、012(对应十进制的10)、0x12(对应十进制的18)等。
  • long类型的直接量:在整型数值后添加l或L后就变成了long类型的直接量。例如3L、0x12L (对应十进制的18L)。
  • float类型的直接量:在一个浮点数后添加f或F就变成了float类型的直接量,这个浮点数可以是标准小数形式,也可以是科学计数法形式。例如5.34F、3.14E5f。
  • double类型的直接量:直接给出一个标准小数形式或者科学计数法形式的浮点数就是double类型的直接量。例如5.34、3.14E5。
  • boolean类型的直接量:这个类型的直接量只有true和false。
  • char类型的直接量:char类型的直接量有3种形式,分别是用单引号括起来的字符、转义字符和Unicode值表示的字符。例如’a’、’\n’和’\u0061’。
  • String类型的直接量:一个用双引号括起来的字符序列就是String类型的直接量。
  • null类型的直接量:这个类型的直接量只有一个值,即null。

java运算符

算术运算符

  • +:加法运算符
  • -:减法运算符
  • *:乘法运算符
  • /:除法运算符
  • %:求余运算符
  • ++:自加。这是个单目运算符,运算符既可以出现在操作数的左边,也可以出现在操作数的右边。但出现在左边和右边的效果是不一样的。如果把++放在左边,则先把操作数加1,然后才把操作数放入表达式中运算;如果把++放在右边,则先把操作数放入表达式中运算,然后才把操作数加1。
  • –:自减。也是个单目运算符,用法与++基本相似,只是将操作数的值减1。

赋值运算符

赋值运算符用于为变量指定变量值,与C类似,Java也使用=作为赋值运算符。

位运算符

Java支持的位运算符有如下7个。

  • &:按位与。
  • |:按位或。
  • ~:按位非。
  • ^:按位异或。
  • <<:左移运算符。
  • >>:右移运算符。
  • >>>:无符号右移运算符。

扩展后的赋值运算符

扩展后的赋值运算符如下:

  • +=:对于x+=y,即对应于x=x+y
  • -=:对于x-=y,即对应于x=x-y。
  • *=:对于x *=y,即对应于x=x * y。
  • /=:对于x /=y,即对应于x=x / y。
  • %=:对于x %=y,即对应于x=x % y。
  • &=:对于x &=y,即对应于x=x & y。
  • |=:对于x |=y,即对应于x=x | y。
  • ^=:对于x ^=y,即对应于x=x ^ y。
  • <<=:对于x <<=y,即对应于x=x << y。
  • >>=:对于x >>=y,即对应于x=x >> y。
  • >>>=:对于x >>>=y,即对应于x=x >>> y。

比较运算符

比较运算符用于判断两个变量或常量的大小,比较运算的结果是一个布尔值(true或false)。Java支持的比较运算符如下:

  • >:大于,只支持左右两边操作数是数值类型。如果前面变量的值大于后面变量的值,则返回true。
  • >=:大于等于,只支持左右两边操作数是数值类型。如果前面变量的值大于等于后面变量的值,则返回true。
  • <:小于,只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回true。
  • <=:小于等于,只支持左右两边操作数是数值类型。如果前面变量的值小于等于后面变量的值,则返回true。
  • ==:等于,如果进行比较的两个操作数都是数值类型,即使它们的数据类型不相同,只要它们的值相等,也都将返回true。
  • !=:不等于,如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相等,也都将返回true。如果两个操作数都是引用类型,只有当两个引用变量引用的相同类的实例时才可以比较,只要两个引用指向的不是同一个对象就会返回true。

逻辑运算符

逻辑运算符用于操作两个布尔型的变量或常量。逻辑运算符主要有如下6个:

  • &&:与,前后两个操作数必须都是true才返回true,否则返回false。
  • &:不短路与,作用与&&相同,但不会短路。
  • ||:或,只要两个操作数中有一个是true,就可以返回true,否则返回false。
  • |:不短路或,作用与||相同,但不会短路。
  • !:非,只需要一个操作数,如果操作数为true,则返回false;如果操作数为false,则返回true。
  • ^:异或,当两个操作数不同时才返回true,如果两个操作数相同则返回false。

三目运算符

三目运算符只有一个:? :,三目运算符的语法格式如下:

(expression) ? if-true-statement : if-false-statement;
大部分时候,三目运算符都是作为if else的精简写法。

运算符优先级

下图列出了包括分隔符在内的所有运算符的优先级顺序,上一行中的运算符总是优先于下一行的:
《疯狂java讲义》学习(1):数据类型与运算符_第2张图片

参考:
《疯狂java讲义》

你可能感兴趣的:(java)