Java 数据类型和运算符

注释

单行注释//......
多行注释/ .../
文档注释/*.../ 文档注释位于注释内容上一行

标识符和关键字

分隔符

分号:作为语句的分隔,每个Java语句必须使用分号作为结尾。
花括号:定义一个代码块,一个代码块指的就是{}中所包含的一段代码,代码块在逻辑上是一个整体。
方括号:用于访问数组元素,通常紧跟数组变量名,方括号里指定希望访问的数组元素的索引。
圆括号:定义方法时必须使用圆括号来包含所有的形参声明;调用方法时也必须使用圆括号来传入实参值;将表达式中某个部分括成一个整体,保证这个部分优先计算;强制类型转换的运算符
空格
圆点:类/对象和它的成员(包括成员变量、方法和内部类)之间的分隔符,表明调用某个类或某个实例的指定成员。

标识符

以字母、下划线_、美元符$开头,后面可以跟任意数目的字母、数字、下划线、美元符,字母也可以包含中文字符、日文字符等。区分大小写。

关键字

Java的所有关键字都是小写的

abstract    continue    for            new            switch
assert      default     if             package        synchronized
boolean     do          goto           private        this
break       double      implements     protected      throw
byte        else        import         public         throws
case        enum        instanceof     return         transient
catch       extends     int            short          try
char        final       interface      static         void
class       finally     long           strictfp       volatile
const       float       native         super          while

数据类型分类

Java语言是强类型语言:①所有的变量必须先声明,后使用;②指定类型的变量只能接受类型与之匹配的值。

基本数据类型

布尔类型

 true或false,占用8位。(最小内存单元是字节)布尔类型的变量或值主要用作旗标来进行流程控制。

 if条件控制语句
 while循环控制语句
 do while循环控制语句
 for循环控制语句
 三目运算符(?:)
    

数值类型:整数类型、字符类型、浮点类型

整型:byte(8)、short(16)、int(32)、long(64)
    直接给出一个整数值默认就是int类型。
    如果直接将一个较小的整数值赋予一个byte或short变量,系统会自动把这个整数值当成byte或short类型来处理。  
    如果使用一个巨大的整数值(超出int类型范围),Java不会自动把这个整数值当成long类型来处理。应在这个整数值后增加L作为后缀。
    
    二进制0B或0b开头;八进制以0开头;十六进制以0X或0x开头;
    二进制数默认占32位,其中第32位是符号位
    
    所有数字在计算机底层都是以二进制形式存在的,原码是直接将一个数值换算成二进制数。但计算机以补码的形式保存所有的整数。补码的计算规则:正数的补码和原码完全相同,负数的补码是其反码加1;反码是对原码按位取反,只是最高位(符号位)保持不变。

字符型:16位,Unicode字符集,使用用单引号括起来
    单个字符来指定字符型值'A';转义字符来表示特殊字符型值'\n';直接使用Unicode值来表示字符型值,'\uXXXX',其中XXXX代表一个十六进制的整数
    
    Java语言中常用的转义字符
    \b    退格符
    \n    换行符
    \r    回车符
    \t    制表符
    \"    双引号
    \'    单引号               
    \\    反斜线 
    
    char类型的值也可直接作为char类型来处理,相当于一个16位的无符号整数。char类型的变量、值完全可以参与加、减、乘、除等数学运算,也可以比较大小——用该字符对应的编码参与运算。
    
    String类表示字符串,使用双引号括起来。
    
浮点型:float(32)、double(64)
    float:第1位符号位,接下来8位表示指数,再接下来23位表示尾数。
    double:第1位符号位,接下来11位表示指数,再接下来的52位表示尾数。
    
    Java语言的浮点数有两种表示形式
        十进制数形式,浮点数必须包含一个小数点。
        科学计数法形式
        
    默认类型是double类型,如果希望Java把一个浮点类型值当成float类型处理,应该在这个浮点类型值后紧跟f或F。
    三个特殊的浮点数值:
        正无穷大:Double或Float类的POSITIVE_INFINITY。
        负无穷大:Double或Float类的NEGATIVE_INFINITY。
        非数:Double或Float类的NaN;NaN不与任何数值相等,甚至和NaN都不相等。
        

数值中使用下划线分割

通过使用下划线分割,可以更直观地分辨数值中到底包含多少位。
        

基本类型的类型转换

自动类型转换

当把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统将可以进行自动类型转换。
char → int → long → float → double
byte → short → long → float → double
+不仅可以作为加法运算符使用,还可作为字符串连接运算符使用。

强制类型转换

强制类型转换的语法格式是(targetType)value,强制类型转换的运算符是圆括号。
8个包装类:Boolean、Byte、Short、Integer、Long、Character、Float、Double。parseXxx(String str)静态方法用于将字符串转换成基本类型。

表达式类型的自动提升
当一个算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。

  1. 所有的byte类型、short类型和char类型将被提升到int类型。

  2. 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。

直接量

直接量是指在程序中通过源代码直接给出的值。

直接量的类型

能指定直接量的通常只有:基本类型、字符串类型和null类型。int、long、float、double、boolean、char、String、null。

null可以赋给任何引用类型的变量,用以表示这个引用类型变量中保存的地址为空,即还未指向任何有效对象。

直接量的赋值

允许把一个数字直接量直接赋给另一种类型的变量,这种赋值必须是系统所支持的自动类型转换;String类型的直接量不能赋给其他类型的变量;null类型的直接量可以直接赋给任何引用类型的变量,包括String类型;boolean类型的直接量只能赋给boolean类型的变量,不能赋给其他任何类型的变量

当程序第一次使用某个字符串直接量时,Java会使用常量池(constant pool)来缓存该字符串直接量,如果程序后面的部分需要用到该字符串直接量时,Java会直接使用常量池(constant pool)中的字符串直接量

由于String类是一个典型的不可变类,因此String对象创建出来就不可能被改变

常量池(constant pool)指的是编译期被确定,并被保存在已编译的.class文件中的一些数据。包括关于类、方法、接口中的常量,也包括字符串直接量

String s0 = "hello";
String s1 = "hello";    
String s2 = "he" +"llo";    
System.out.println( s0 == s1 );    // true
System.out.println( s0 == s2 );    // true

Java会确保每个字符串常量只有一个,不会产生多个副本,例子中的s0和s1中的"hello"都是字符串常量,它们在编译期就被确定了,所以s0 == s1返回true;而"he"和"llo"也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它本身也是字符串常量,s2同样在编译期就被解析为一个字符串常量,所以时s2也是常量池中"hello"的引用

运算符

算术运算符

+:加法运算符、字符串的连接运算符
-:减法运算符
*:乘法运算符
/:除法运算符。如果两个操作数都是整数类型,则计算结果也是整数,将自然除法的结果截断取整;除数不可以是0,否则将引发除以零异常。
%:求余运算符。如果两个操作数都是整数类型,则求余运算的第二个操作数不能是0,否则将引发除以零异常;如果两个操作数中有一个或者两个都是浮点数,则允许第二个操作数是0或0.0,结果是非数;0或0.0对零以外的任何数求余都将得到0或0.0。
++:自加。①自加是单目运算符,只能操作一个操作数;②自加运算符只能操作单个数值型(整型、浮点型都行)的变量,不能操作常量或者表达式;
    ++放在左边,先把操作数加1,然后才把操作数放入表达式中运算;++放右边,先把操作数放入表达式中运算,然后才把操作数加1。
--:自减。
java.lang.Math类:Math.pow(a,5) 求a的5次方;Math.sqrt(a) 求a的平方根;Math.random()返回0~1之间的伪随机数; Math.sin(1.57) 求1.57的sin函数值
-:求负运算符

位运算符

&:按位与。当两位同时为1时才返回1。
|:按位或。只要有一位为1即可返回1。
~:按位非。单目运算符,将操作数的每个位(包括符号位)全部取反。
^:按位异或。当两位相同时返回0,不同时返回1。
<<:左移运算符。将操作数的二进制码整体左移指定位数,左移后右边空出来的位以0填充。5<<2,5左移2位。
>>:右移运算符。把第一个操作数的二进制码右移指定位数后,左边空出来的位以原来的符号位填充,即如果第一个操作数原来是正数,则左边补0;如果第一个操作数是负数,则左边补1。
>>>:无符号右移运算符。把第一个操作数的二进制码右移指定位数后,左边空出来的位总是以0填充。
1.对于低于int类型(如byte、short和char)的操作数总是先自动类型转换为int类型后再移位。
2.对于int类型的整数移位a>>b,当b>32时,系统先用b对32求余,得到的结果才是真正移位的位数。
3.对于long类型的整数移位a>>b,当b>64时,总是先用b对61求余,得到的结果才是真正移位的位数。

赋值运算符

用于为变量指定变量值

扩展后的赋值运算符

具有更好的性能,而且程序更加健壮,推荐使用。
+=    -=    *=    /=    &=    |=    ^=    <<=    >>=    >>>=

比较运算符

>    >=    <    <=    ==    !=

==:如果进行比较的两个操作数都是数值类型,即使他们的数据类型不相同,只要它们的值相等,也都将返回true。如91='a'返回true,5.0==5也返回true。如果两个操作数都是引用类型,那么只有当两个引用变量的类型具有父子关系时才可以比较,而且这两个引用必须指向同一个对象才会返回true。

逻辑运算符

用于操作两个布尔型的变量或常量。

&总会计算前后两个操作数,而&&先计算左边的操作数,如果左边的操作数为false,则直接返回false,根本不会计算右边的操作数。
&&:与,前后两个操作数必须都是true才返回true,否则返回false。
&:不短路与,作用与&&相同,但不会短路

||如果第一个操作数返回true,||将不再对第二个操作数求值,直接返回true。|总是执行前后两个操作数。
||:或,只要两个操作数中有一个是true,则返回false;如果操作数为false,则返回true。
|:不短路或,作用与||相同,但不会短路。

!:非,只需要一个操作数,如果操作数为true,则返回false;如果操作数为false,则返回true。
^:异或,当两个操作数不同时才返回true,如果两个操作数相同则返回false

三目运算符

(expression)?if-true-statement:if-false-statement

先对逻辑表达式expression求值,如果逻辑表达式返回true,则返回第二个操作数的值,如果逻辑表达式返回false,则返回第三个操作数的值。三目运算符都是作为if else的精简写法。
三目运算符不支持多个语句,但可以嵌套。

运算符的结合性和优先级

分隔符                .    []    ()    {}    ,    ;
单目运算符            ++    --    ~     !
强制类型转换运算符    (type)
乘法/除法/求余         *     /    %
加法/减法              +     -
移位运算符             <<    >>   >>>
关系运算符             <     <=    >    >=   instanceof
等价运算符             ==    !=
按位与                 &
按位异或               ^
按位或                 |
条件与                 &&
条件或                 ||
三目运算符              ?:
赋值运算符              =    +=   -=   *=  /=   &=   |=   ^=   %=   <<=   >>=   >>>=  


你可能感兴趣的:(优先级,运算符,数据类型,java)