(翻译)《二》语言基础(2)--操作符

操作符

现在你已经学习了如何声明和初始化一个变量,你也许想要知道如何使用变量。学习java操作符是一个不错的开头。操作符是专门的符号,来对一个或两个或三个操作数执行专门的操作,并返回结果。

在我们研究java操作符之前,去了解操作符的优先级是有帮助的。操作符根据优先级在下表中列出。最上面的优先级最高。较高优先级操作符会比较低优先级操作符先计算。同一行的操作符优先级一样。当一个表达式中出现同样优先级的操作符,需要给出计算的规则。除了赋值操作符,所有二元操作符是从左到右计算。赋值操作符是从右到左。

操作符优先级
后缀expr++ expr--
一元++expr --expr +expr -expr ~ !
乘法* / %
加法+ -
位移<< >> >>>
关系< > <= >= instanceof
等于== !=
位与&
位或|
位异或^
逻辑与&&
逻辑或||
三元? :
赋值= += -= *= /= %= &= |= ^= >>= <<= >>>=

通常编程中,一些操作符比另外一些操作符的使用频率更高;比如赋值操作符"="远比无符号向右位移操作符">>>"更常用。所以,下面先讨论更常使用的操作符,然后再讨论不那么常用的操作符。每一部分都伴随有可以编译执行的代码。学习代码的输出可以加强你的学习。

赋值、计算、一元操作符

简单的赋值操作符

你将碰到的最常用的一个操作符就是简单赋值操作符"="。你在Bicycle类中看到过;它把右边的值赋给左边的操作数:

int cadence = 0;

int gear = 0;

int speed = 0;

这个操作符也可以把对象赋值给对象引用。

运算操作符

java提供加减乘除操作符。你可以很容易认出它们,因为和数学里的符号是一样的。唯一例外的是"%"取模操作符,返回一个操作数除以另一个操作数剩下的值。代码:

class ArithmeticDemo{

    public static void main (String[] args) {

        int result = 1 + 2;
        // result is now 3
        System.out.println("1 + 2 = " + result);
        int original_result = result;

        result = result - 1;
        // result is now 2
        System.out.println(original_result + " - 1 = " + result);
        original_result = result;

        result = result * 2;
        // result is now 4
        System.out.println(original_result + " * 2 = " + result);
        original_result = result;

        result = result / 2;
        // result is now 2
        System.out.println(original_result + " / 2 = " + result);
        original_result = result;

        result = result + 8;
        // result is now 10
        System.out.println(original_result + " + 8 = " + result);
        original_result = result;

        result = result % 7;
        // result is now 3
        System.out.println(original_result + " % 7 = " + result);
    }
}
输出为:
1 + 2 = 3
3 - 1 = 2
2 * 2 = 4
4 / 2 = 2
2 + 8 = 10
10 % 7 = 3
你也可以结合运算操作符和简单赋值操作符创建复合赋值。比如:x += 1; 和x = x + 1;都会把x的值加一。"+"操作符也可以用来连接两个字符串。比如下面代码:
class ConcatDemo{
  public static void main(String[] args){
    String f = "this is ";
    String s = "a concat string";
    String t = f + s;
    System.out.println(t);
  }
}
程序的最后,变量t包含"this is a concat string"被打印出来。
一元操作符
一元操作符只需要一个操作数;它们执行各种操作比如对变量增加1、减少1、对一个表达式取反、反转一个布尔值。
+  一元加操作符;表示一个正值
-  一元减操作符,对表达式取负
++  自加操作符
--  自减操作符
!  逻辑取补操作符,反转一个布尔值
下面程序测试一元操作符:
class UnaryDemo{
  public static void main(String[] args){
    int result = +1;
    System.out.println(result);
    
    result--;
    System.out.println(result);

    result++;
    System.out.println(result);

    result = -result;
    System.out.println(result);

    boolean success = false;
    System.out.println(success);

    success = !success;
    System.out.println(success);
  }
}
自加和自减操作符可以作为操作数的前缀或后缀。代码result++和++result,result最后都会加1。唯一的区别是前缀使用加1的值计算,后缀使用未加1的值计算。如果你只是自加1前缀和后缀没有区别。但是如果是在一个大的表达式中,两者还是有区别的。
下面的例子展示了前缀和后缀一元操作符:
class PrePostDemo{
  public static void main(String[] args){
    int i = 3;
    i++;
    System.out.println(i);
    ++i;
    System.out.println(i);
    System.out.println(++i);
    System.out.println(i++);
    System.out.println(i);
  }
}

等式、关系式、条件操作符
等式和关系式操作符
等式和关系式操作符决定一个操作数是否大于、小于、等于或不等于另一个操作数。大部分操作符看起来都很熟悉。注意,你必须使用"=="而不是"="来测试两个基础数据类型的值是否相等。
==等于
!=不等于
>大于
>=大于等于
<小于
<=小于等于
下面代码测试了比较操作符:
class ComparisonDemo{
  public static void main(String[] args){
    int a = 1;
    int b = 2;
    if(a == b){
      System.out.println("a == b");
    }
    if(a != b){
      System.out.println("
a != b");
    }
    if(a > b){
      System.out.println("a > b");
    }
    if(a >= b){
      System.out.println("a >= b");
    }
    if(a < b){
      System.out.println("a < b");
    }
    if(a <= b){
      System.out.println("a <= b");
    }
  }
}
输出:
a != b
a < b
a <= b

条件操作符
"&&"、"||"操作符对两个布尔表达式执行条件与和条件或操作。这两个操作符执行最短路径行为,这表示第二个操作数只在需要的时候计算。
&&  条件与
||  条件或
下面程序测试这两个操作符:
class ConditionalDemo1{
  public static void main(String[] args){
    int value1 = 1;
    int value2 = 2;
    if((value1 == 1) && (value2 == 2)){
      System.out.println("value1 is 1 and value2 is 2.");
    }
    if((value1 == 1) || (value2 ==1)){
      System.out.println("value1 is 1 or value2 is 1.");
    }
  }
}
另外一个条件操作符是?:,可以被认为是if-then-else语句的速写法。这个操作符是三元操作符,因为它有三个操作数。下面的例子中,这个操作符可以被解读为:如果条件是真,则把value1赋给result,否则,把value2赋给result。
class ConditionalDemo2{
  public static void main(String[] args){
    int value1 = 1;
    int value2 = 2;
    int result;
    boolean someCondition = true;
    result = someCondition ? value1 : value2;
    System.out.println(result);
  }
}
因为someCondition为真,所以程序打印1。使用?:替换if-then-else如果能让你的代码可读性更高,比如当这个表达式比较紧凑并且没有副作用(好像赋值)。

类型比较操作符instanceof
instanceof操作符比较一个对象是否属于某一个类型。你可以用它来测试一个对象是否是一个类的实例、一个子类的实例或者是一个实现某个接口的类的实例。
下面代码,定义一个父类,一个接口,一个子类,子类继承了父类并实现了接口。
class Parent{}
interface MyInterface{}
class Child extends Parent implements MyInterface{}
class InstanceofDemo{
  public static void main(String[] args){
    Parent obj1 = new Parent();
    Parent obj2 = new Child();
    System.out.println(obj1 instanceof Parent);//true
    System.out.println(obj1 instanceof Child);//false
    System.out.println(obj1 instanceof MyInterface);//false
    System.out.println(obj2 instanceof Parent);//true
    System.out.println(obj2 instanceof Child);//true
    System.out.println(obj2 instanceof MyInterface);//true
  }
}
使用instanceof操作符时注意,null不属于任何一个类型。

按位和位移操作符
java对整数类型也提供了按位和位移操作符。本节讨论的操作符并不那么常见。因此会讲解的比较简单,只是让你知道这些操作符的存在。
一元按位取补操作符"~"会按位模式反转。它可以应用于任何整数类型,把每一个"0"变成"1",每一个"1"变成"0"。比如一个字节有8位,使用这个操作符,它的位模式本来是"00000000",则会变成"11111111"。
有符号的左位移操作符"<<"按位模式向左移动,有符号的右位移操作符">>"按位模式向右移动。需要位移的数在符号的左边,移动位置的个数在符号的右边。无符号的右位移操作符">>>"位移后,最左边补0,而有符合右位移则根据符号补充。
按位与操作符"&"执行按位与操作。
按位异或操作符"^"执行异或操作。
按位或操作符"|"执行或操作。
例子代码如下:
class BitDemo{
  public static void main(String[] args){
    int a = 0x000F;
    int b = 0x2222;
    System.out.println(a & b);
  }
}

操作符总结

下面的快速参考总结了java支持的操作符。
简单赋值操作符
=  简单赋值操作符
运算操作符
+  加法操作符(也是字符串的连接符)
-  减法操作符
*  乘法操作符
/  除法操作符
%  取模操作符
一元操作符
+  一元加操作符;表示一个正数
-  一元减操作符;取反一个表达式
++  增量操作符,给值加1
--  减量操作符,给值减1
!  逻辑求补操作符,给布尔型取反
等式和关系式操作符
=  等于
!=  不等于
>  大于
>=  大于等于
<  小于
<=  小于等于
条件操作符
&&  条件与
||  条件或
?:  三元表达式
类型比较操作符
instanceof  比较一个对象是否是某一类型的
按位和位移操作符
~  一元按位取补
<<  有符合左位移
>>  有符合右位移
>>>  无符号右位移
&  按位与
|  按位或
^  按位异或

 

转载于:https://www.cnblogs.com/apple-2016/p/5958607.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值