Java SE学习(四)之Java的基础语法(中)

Java的基础语法(中)

运算符

运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。任何一个运算符都要对一个或者多个数据进行操作,所以运算符又叫做操作符。Java 为了方便程序员对数据进行运算,提供了一些丰富的运算符,大致可以分为如下几组:

  • 算数运算符
  • 关系运算符
  • 逻辑运算符
  • 赋值运算符
  • 位运算符
  • 其他运算符

运算符在使用时应该注意数据类型的转换(详见 Java SE学习(三)之Java的基础语法(上)),当有若干个变量参与运算时,结果类型取决于这些变量中表示范围最大的那个变量类型。例如:参与运算的变量中有整型 int,有双精度浮点型 double,有短整型 short,那么最后的结果类型就是 double。

算数运算符

加法和减法运算符

加法运算符是 +,减法运算符是 -。它们的用法和普通数学中的用法相同,例如:3 + 55 - 2。它们需要运算符的两侧都有数据,因此称为双目运算符。在原生数据类型中,只有 boolean 类型不能进行加法和减法运算。

使用格式:

<exp1> + <exp2>
<exp1> - <exp2>

正值和负值运算符

正值运算符是 +,负值运算符是 -。它们看上去和加法减法运算符相同,但是它们只有右侧有数据,称为单目运算符。此外,这两个运算符都不能改变操作数本身的值。在原生数据类型中,只有 boolean 类型不能进行加法和减法运算。

使用格式:

<+><exp>
-<exp>

乘法和除法运算符

乘法运算符是 *,除法运算符是 /,它们都是双目运算符,虽然看上去不像在数学中使用的 ×÷,但是用法却相同。在原生数据类型中,只有 boolean 类型不能进行加法和减法运算。

使用格式:

<exp1> * <exp2>
<exp1> / <exp2>

注意:如果 / 两边的操作数都是整型数据,系统会自动对结果进行取整(不是四舍五入,而是截掉小数部分)。

取模运算符

取模运算符是 %,所谓取模实际上就是数学中的求余数,它的操作数可以是正整数,也可是是负数,甚至是浮点数。

使用格式:

<exp1> % <exp2>

运算规则:

a % b = a - (int)(a/b) * b

例如:

5 % 3 = 2
5 % -3 = 2
-5 % 3 = -2
-5 % -3 = -2

自增和自减运算符

自增运算符是 ++, 自减运算符是 --,它们都是单目运算符。其中,++ 的作用是让变量的值加1,-- 的作用是让变量的值减1。它们的操作时只能是变量,不能是常量,且会改变操作数本身的值。

++-- 既可以放在变量的前面,也可以放在变量的后面。当放在变量的前面时,表示先将变量的值加1或者减1,然后将结果作为表达式的值进行后续运算;当放在变量的后面时,表示先将变量的值作为表达式的值进行运算,然后再将变量的值加1或者减1。

使用格式:

<变量>++
++<变量>
<变量>--
--<变量>

关系运算符

关系运算符可以决定操作数之间的逻辑关系。例如,两个操作数是否相等,操作数1与操作数2相比谁大谁小等等。由关系运算符连接起来的表达式称为关系表达式,它的值都是 boolean 类型的,也就是只有 true 和 false 两个值。

相等运算符

Java 中的相等运算符为 ==,它是一个双目运算符。

使用格式:

<exp1> == <exp2>

它的两侧可以是任意相同或者相容的数据或者表达式。例如:

5 == 3
(a * 3) == b + 2
true == true

如果 == 两侧的值相等,则返回 true,表示等式成立;如果不相等,则返回 false,表示等式不成立。虽然 == 可以比较浮点数,但是浮点数往往不能精确表示,因此一般不使用 == 判断浮点数是否相等。

不相等运算符

Java 中的不相等运算符为 !=,它也是一个双目运算符。

使用格式:

<exp1> != <exp2>

它的两侧可以是任意相同或者相容的数据或者表达式。例如:

5 != 3
(a * 3) != b + 2
true != true

!= 两侧的值相等,则返回 false,表示判断不成立;如果不相等,则返回 true,表示判断成立。

大小关系运算符

Java 中的大小关系运算符总共有4个,分别是 ><>=<=,它们都是双目运算符。它们的运算规则与数学中完全相同,操作数的类型可以是整型或者浮点型。

使用格式:

<exp1> > <exp2>
<exp1> < <exp2>
<exp1> >= <exp2>
<exp1> <= <exp2>

若关系成立,则返回 true,否则返回 false。

逻辑运算符

逻辑运算符用来表示一个命题 “成立” 还是 “不成立”。因此,逻辑运算符的运算结果也是 boolean类型,即true 和 false。

逻辑与运算符

逻辑与运算符是 &&,它是双目运算符。它的操作数可以是 boolean 类型的表达式或者数据。

使用格式:

<exp1> && <exp2>

上式表达的语义是:只有当 <exp1><exp2> 同时为 true 的时候,整个表达式的值才为 true;否则,整个表达式的值为 false。

下面是逻辑与运算符的真值表:

exp1 exp2 exp1 && exp2
false false false
false true false
true false false
true true true

逻辑或运算符

逻辑或运算符是 ||,它是双目运算符。它的操作数可以是 boolean 类型的表达式或者数据。

使用格式:

<exp1> || <exp2>

上式表达的语义是:只有当 <exp1><exp2> 同时为 false 的时候,整个表达式的值才为 false;否则,整个表达式的值为 true。

下面是逻辑或运算符的真值表:

exp1 exp2 exp1丨丨exp2
false false false
false true true
true false true
true true true

逻辑非运算符

逻辑非运算符是 !,它是单目运算符。它的操作数可以是 boolean 类型的表达式或者数据。

使用格式:

!<exp>

上式表达的语义是:当 <exp> 为 false 的时候,整个表达式的值为 true;反之,整个表达式的值为 false。

下面是逻辑非运算符的真值表:

exp !exp
false true
true false

短路运算

逻辑与和逻辑或运算符具有以下特性,对于表达式:

exp1 && exp2
exp1 || exp2

当以下条件有一个满足时:

  • 在逻辑与表达式中,exp1 的计算结果为 false
  • 在逻辑或表达式中,exp1 的计算结果为 true

则整个表达式计算完毕。因为这时已经 能够确定整个表达式的逻辑值,所以 exp2 不会被计算。这个特性,被称为短路运算。

位运算符

Java 提供了多种位运算。位运算将操作数解释为有序的 “位” 集合,这些位中的某一位或者若干位可以具有独立的含义,可以随心所欲地操作存储单元中的二进制位。位运算符通常作用于整数,且参与运算的操作数均以补码的形式出现。

按位与运算符

按位与运算符是 &,它是双目运算符,功能是将参与运算的两个操作数各个对应的二进制位作 “与” 运算。只有当对应的两个二进制位均为1时,结果位才为1;否则为0。

使用格式:

<操作数> & <操作数>

例如:

int a = 3;
int b = 4;
System.out.println(a & b);

分析:

3 的二进制:00000000 00000000 00000000 00000011 
4 的二进制:00000000 00000000 00000000 00000100

进行运算:
  00000000 00000000 00000000 00000011
& 00000000 00000000 00000000 00000100
-------------------------------------
  00000000 00000000 00000000 00000000

结果:0

按位或运算符

按位或运算符是 |,它是双目运算符,功能是将参与运算的两个操作数各个对应的二进制位作 “或” 运算。只有当对应的两个二进制位均为0时,结果位才为0;否则为1。

使用格式:

<操作数> | <操作数>

例如:

int a = 3;
int b = 4;
System.out.println(a | b);

分析:

3 的二进制:00000000 00000000 00000000 00000011 
4 的二进制:00000000 00000000 00000000 00000100

进行运算:
  00000000 00000000 00000000 00000011
| 00000000 00000000 00000000 00000100
-------------------------------------
  00000000 00000000 00000000 00000111

结果:7

按位异或运算符

按位异或运算符是 ^,它是双目运算符,功能是将参与运算的两个操作数各个对应的二进制位作 “异或” 运算。只有当对应的两个二进制位不相同时,结果位才为1;否则为0。

使用格式:

<操作数> ^ <操作数>

例如:

int a = 3;
int b = 4;
System.out.println(a ^ b);

分析:

3 的二进制:00000000 00000000 00000000 00000011 
4 的二进制:00000000 00000000 00000000 00000100

进行运算:
  00000000 00000000 00000000 00000011
^ 00000000 00000000 00000000 00000100
-------------------------------------
  00000000 00000000 00000000 00000111

结果:7

按位取反运算符

按位取反运算符是 ~,它是单目运算符,功能是将参与运算的操作数的各个二进制位 “按位取反”。

使用格式:

~<操作数>

例如:

int a = 3;
System.out.println(~a);

分析:

3 的二进制:00000000 00000000 00000000 00000011 

进行运算:
~ 00000000 00000000 00000000 00000011
-------------------------------------
  11111111 11111111 11111111 11111100 补码
  11111111 11111111 11111111 11111011 反码
  10000000 00000000 00000000 00000100 原码

结果:-4

左移位运算符

左移位运算符是 <<,它是双目运算符,功能是将 << 左边的操作数的各个二进制位全部左移指定的位数。左移时,操作数移出左边界的位被丢弃,从右边开始用 0 填补空位。

使用格式:

<操作数> << <移位位数>

例如:

int a = 16;
System.out.println(a << 2);

分析:

16 的二进制:00000000 00000000 00000000 00010000

进行运算:
    00000000 00000000 00000000 00010000
(00)00000000 00000000 00000000 01000000

结果:64

带符号右移位运算符

带符号右移位运算符是 >>,它是双目运算符,功能是将 >> 左边的操作数的各个二进制位全部右移指定的位数。右移时,操作数移出右边界的位被丢弃,从左边开始用 符号位 填补空位。如果原来最高位是1,则填补1;如果是0,则填补0。

使用格式:

<操作数> >> <移位位数>

例如:

int a = 16;
System.out.println(a >> 2);

分析:

16 的二进制:00000000 00000000 00000000 00010000

进行运算:
00000000 00000000 00000000 00010000
00000000 00000000 00000000 00000100(00)

结果:4

不带符号右移位运算符

不带符号右移位运算符是 >>>,它是双目运算符,功能是将 >>> 左边的操作数的各个二进制位全部右移指定的位数。右移时,操作数移出右边界的位被丢弃,从左边开始用 0 填补空位。

使用格式:

<操作数> >>> <移位位数>

例如:

int a = 16;
System.out.println(a >>> 2);

分析:

16 的二进制:00000000 00000000 00000000 00010000

进行运算:
00000000 00000000 00000000 00010000
00000000 00000000 00000000 00000100(00)

结果:4

赋值运算符

Java 中的赋值运算符有两种,一种是简单的赋值运算符 =,;另外一种是将 = 与其他的运算符复合在一起形成的复合赋值运算符。

简单赋值运算符

赋值运算符为 =,它是双目运算符,它不等同于数学中的等号。由赋值运算符连接的表达式,称为赋值表达式。

使用格式:

<变量> = <exp>

在 Java 中,出现在赋值运算符左边的操作数被称为 “左值”,出现在赋值运算符右边的操作数被称为 “右值”。常量和表达式不能作为 “左值”。

复合赋值运算符

为了避免对同一存储对象的地址重复计算,提高编译效率,Java 引入了复合赋值运算符。Java 提供了 11 种复合赋值运算符,它们分别是:+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=。

例如:

x += 6.0           等价于     x = x + 6.0
z *= z + y         等价于     z = z * (x + y)
a += a -= b + 5    等价于     a = a + (a = a - (b + 5))

其他运算符

条件运算符

条件运算符同样也被称作为三元运算符,它是三目运算符。这种运算符由三个操作数组成,被用作评估布尔数学体系表达。这种运算符的目的是来决定哪些值应被赋予到变量上。

使用格式:

<exp1> ? <exp2> : <exp3>

运算规则:首先计算 exp1,当其结果为 true 时,条件运算表达式取 exp2 的值作为整个表达式的值,否则取 exp3 的值作为整个表达式的值。

例如:

public class Test {

   public static void main(String args[]){
      int a , b;
      a = 10;
      b = (a == 1) ? 20: 30;
      System.out.println( "Value of b is : " +  b );

      b = (a == 10) ? 20: 30;
      System.out.println( "Value of b is : " + b );
   }
}

结果如下:

Value of b is : 30
Value of b is : 20

instanceof 运算符

instanceof 操作符只用于对象引用变量,其功能是检查对象是否是独特类型(类型或接口类型)。如果在运算符左侧的由变量所指代的对象为右侧的类型或接口类型通过 IS-A 检查,那么结果为真。

使用格式:

(Object reference variable) instanceof (class/interface type)

例如:

public class Test {

   public static void main(String args[]){
      String name = "James";
      // following will return true since name is type of String
      boolean result = name instanceof String;  
      System.out.println(result);
   }
}

结果为:

true
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容