java运算符

java运算符

 在Java语言中,使用+、-、*、/来表示加减乘除运算,当/运算的操作数都为整数时,表示整数的除法;否则则表示浮点除法。整数的取余操作,用%表示。

  • 注意:整数被0除将会产生一个异常,而浮点数被0除则会得到无穷大或NaN。

一、类型转换

  • 在我们日常的开发过程中,经常需要将一种数值类型转换为另外一种数值类型,下面给出数值类型之间的合法转换。
byte
short
int
long
char
float
double
  • 实心箭头表示无信息丢失转换。
  • 虚线箭头表示可能有精度丢失的转换。

二、强制类型转换

  在必要时,int类型的值将会自动转换为double类型。在有时候,我们也需要将double类型转换为int类型。在Java中,是允许进行这种类型间数值的转换的,当然,有可能会丢失一些信息。这种情况下,就要通过 强制类型转换(cast) 实现这个操作。

  强制类型转换的语法格式是在圆括号中给出想要的目标类型,后面紧跟着要转换的变量名。

    double num = 9.987;
    int i = (int)num;

强制类型转换后,i 的值为9,并不是num的值9.987,这是因为强制类型转换通过截断小数部分,将浮点值转换为整型。

  如果对浮点数进行四舍五入运算,以便得到最接近的整型,那就需要使用Math.round方法:

    double num = 9.987;
    int i = (int)Math.round(x);

此时 i 的值为10,调用round时,仍然需要使用强制类型转换,是因为round方法的返回值为long类型,由于存在精度丢失的可能性,只有使用显示的强制类型转换才能将long转换成int类型。

三、结合赋值与运算符

  在我们日常的开发中,可以在赋值中使用二元运算法,以达到简写代码的目的。

    result += 1;

    result = result +1;

上述两个表达式含义相同。

  • 一般的,要把运算符放在 = 号左边,如:+=、-=、*=、%= 等。

四、自增与自减

  在日常开发中,加1、减1是数值变量的最常见的操作,在java中,也有同c、c++一样,提供了自增和自减运算符。

    int n = 1;
    n++;        // 将变量n的当前值+1
    n--;        // 将变量n的当前值-1

由于这些运算符会改变变量的值,所以他们的操作数不能是数值。

  • 自增和自减运算符有两种形式
  • 后缀自增自减法(n++、n–) : 先赋值,再进行自增、自减。
  • 前缀自增自减法(++n、–n) : 先自增、自减,再进行赋值。
    int i = 7;
    int j = 7;
    int a = 2 * ++i;    // a = 16, i = 8
    int b = 2 * j++;    // b = 14, j = 8 

建议不要在表达式中使用 ++ ,因为这样的代码很容易让人困惑,而且可能会带来bug。

五、逻辑运算符

  下表列出了逻辑运算符的基本运算,假设布尔变量A为真,变量B为假

操作符描述示例
&&称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。(A && B)为假。
||称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。(A | | B)为真。
!称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。!(A && B)为真。
    public class Test {
        public static void main(String[] args) {
            boolean a = true;
            boolean b = false;
            System.out.println("a && b = " + (a&&b));           // false
            System.out.println("a || b = " + (a||b) );          // true
            System.out.println("!(a && b) = " + !(a && b));     // true
        }   
    }
  • 短路逻辑运算符

当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。

    public class LuoJi{
        public static void main(String[] args){
            int a = 5;//定义一个变量;
            boolean b = (a<4)&&(a++<10);
            System.out.println("使用短路逻辑运算符的结果为"+b);
            System.out.println("a的结果为"+a);
        }
    }

六、位运算符

  Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
  位运算符作用在所有的位上,并且按位运算。假设a = 60,b = 13;它们的二进制格式表示将如下:

    A = 0011 1100
    B = 0000 1101
    -----------------
    A & B = 0000 1100   // 全为1则为1
    A | B = 0011 1101   // 其中一个为1则为1
    A ^ B = 0011 0001   // 两者不同则为1
    ~ A = 1100 0011     // 为0则为1,为1则为0

  下表列出了位运算符的基本运算,假设整数变量 A 的值为 60 和变量 B 的值为 13:

操作符描述示例
&如果相对应位都是1,则结果为1,否则为0(A&B),得到12,即0000 1100
|如果相对应位都是 0,则结果为 0,否则为 1(A | B)得到61,即 0011 1101
^如果相对应位值相同,则结果为0,否则为1(A ^ B)得到49,即 0011 0001
~按位取反运算符翻转操作数的每一位,即0变成1,1变成0。(〜A)得到-61,即1100 0011
<<按位左移运算符。左操作数按位左移右操作数指定的位数。A << 2得到240,即 1111 0000
>>按位右移运算符。左操作数按位右移右操作数指定的位数。A >> 2得到15即 1111
>>>按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。A>>>2得到15即0000 1111
    public class Test {
        public static void main(String[] args) {
            int a = 60; /* 60 = 0011 1100 */ 
            int b = 13; /* 13 = 0000 1101 */
            int c = 0;
            c = a & b;       /* 12 = 0000 1100 */
            System.out.println("a & b = " + c );
        
            c = a | b;       /* 61 = 0011 1101 */
            System.out.println("a | b = " + c );
        
            c = a ^ b;       /* 49 = 0011 0001 */
            System.out.println("a ^ b = " + c );
        
            c = ~a;          /*-61 = 1100 0011 */
            System.out.println("~a = " + c );
        
            c = a << 2;     /* 240 = 1111 0000 */
            System.out.println("a << 2 = " + c );
        
            c = a >> 2;     /* 15 = 1111 */
            System.out.println("a >> 2  = " + c );
        
            c = a >>> 2;     /* 15 = 0000 1111 */
            System.out.println("a >>> 2 = " + c );
        }
    }

七、运算符级别

  当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。

  • 下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
类别操作符关联性
后缀() [] . (点操作符)左到右
一元expr++ expr–从左到右
一元++expr --expr + - ~ !从右到左
乘性* /%左到右
加性+ -左到右
移位>> >>> <<左到右
关系> >= < <=左到右
相等== !=左到右
按位与左到右
按位异或^左到右
按位或|左到右
逻辑与&&左到右
逻辑或||左到右
条件?:从右到左
赋值= + = - = * = / =%= >> = << =&= ^ = | =从右到左
逗号左到右
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值