Java运算符

        Java语言中的表达式是由运算符与操作数组合而成的,所谓的运算符就是用来做运算的符号。
        在Java中的运算符,基本上可分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、转型运算符等。

一、算术运算符
       所谓算术运算符,也就是我们数学中学到的加、减、乘、除等运算。这些操作可以对几个不同类型的数字进行混合运算,为了保证操作的精度,系统在运算的过程中会做相应的转换。
      1、数字精度
       所谓数字精度,也就是系统在做数字之间的算术运算时,为了尽最大可能地保持计算机的准确性,而自动进行相应的转换,将不同的数据类型转变为精度最高的数据类型。规则如下:
      1)当使用运算符把两个操作数结合到一起时,在进行运算前两个操作数会转化成相同的类型。
      2)两个操作数中有一个是double类型的,则另一个将转换成double型。
      3)两个操作数中有一个是float类型的,则另一个将也转换成float型。
      4)两个操作数中有一个是long类型的,则另一个将也转换成long型。
      5)任何其它类型的操作,两个操作数都要转换成int类型。
      2、整数型运算(int型)
       对于int型的相关操作,加、减、乘的结果都是非常容易理解的,重点讲一下除(/)的运算。
       两个整数相除的结果是整数,这一点与数学中是不同的,在Java中,两个整数相除的结果类似于数学中的求模运算。整除的余数是用%表示,例如15 / 2 = 7,而不是7.5,15 % 2 = 1。我们用程序验证一下:

/*两个整数相除及求余数*/

public class Divide
{
   public static void main(String[] args)
   {
      int a = 15;
      int b = 2;
      double c = 2;
      System.out.println(a + "/" + b + "=" + (a / b));
      System.out.println(a + "%"+ b + "=" + (a % b));
      System.out.println(a + "/" + c + "=" + (a / c));
      System.out.println(a + "%" + c + "=" + (a % c));
    }
}

输出结果:
                 15 / 2 = 7
                 15 % 2 = 1
                 15 / 2.0  =  7.5
                 15 % 2.0 = 1.0

        3、自增和自减运算符
        在循环与控制中,我们经常会用到类似于计数器的运算,它们的特征是每次的操作都是加1或减1。在Java中提供了自增、自减运算符,X++使变量X的当前值每次增加1,而X--是自减运算符,每次操作使当前X的值减1。例如:

/*测试自增、自减操作*/

public class SelfAction
{
   public static void main(String[] args)
   {
     int x = 10;
     int a = x+ x++;
     System.out.println("a =" + a);
     System.out.println("x =" + x);
     int b = x + ++x;
     System.out.println("b =" + b);
     System.out.println("x =" + x);
     int c = x + x--;
     System.out.println("c =" + c);
     System.out.println("x =" + x);
     int d = x + --x;
     System.out.println("d =" + d);
     System.out.println("x =" + x);
   }
}  
输出结果:
                 a = 20
                 x = 11
                 b = 23
                 x = 12
                 c = 24
                 x = 11
                 d = 21
                 x = 10

二、关系运算符
        Java具有完美的关系运算符。这些关系运算符基本上同数学中的关系运算符是一致的。“>”大于、“<”小于、“>=”大于等于、“<=”小于等于、“==”等于、“!=”不等于。例如:

/*关系运算符测试*/

public class RelationTest
{
   public static void main(String[] args)
   {
     boolean x, y, z;
     int a = 15;
     int b = 2;
     double c =15;
     x = a > b;  //true;
     y = a < b;  //false;
     z = a != b;  //true;
     System.out.println("x =" + x);
     System.out.println("y =" + y);
     System.out.println("z =" + z);
   }
}
输出结果:
                 x = true
                 y = false
                 z = true

三、逻辑运算符
        在Java语言中有三种逻辑运算符,它们是NOT(非,以符号“!”表示)、AND(与,以符号“&&”表示、)OR(或,以符号“||”表示)。
        1、NOT运算符
         NOT运算符是用来表示相反的意思。
                        NOT逻辑关系值表
                          


A


!A


true


false


false


true

         2、AND运算符
         AND运算符表示“与”的意思,也就是和的意思。
                       AND逻辑关系值表


A


B


A&&B


false


false


false


true


false


false


false


true


false


true


true


true

         3、OR运算符
         OR运算符是用来表示“或”就像我们日常生活中理解的一样,两者只要有一个为“真”,结果就为“真”。
                     OR逻辑关系值表


A


B


A||B


false


false


false


true


false


true


false


true


true


true


true


true

/*逻辑运算符测试*/

public class LogicSign
{
   public static void main(String[] args)
   {
     boolean x, y, z, a, b;
     a = 'a' > 'b';
     b = 'R' != 'r';
     x = !a;
     y = a && b;
     z = a || b;
     System.out.println("x =" + x);
     System.out.println("y =" + y);
     System.out.println("z =" + z);
   }
}
输出结果:
                 x = true
                 y = false
                 z = true

       4、“短路”现象
       在运用逻辑运算符进行相关的操作时,我们会遇到一种很有趣的现象;短路现象。
       对于true && false根据我们的讲述,处理的结果已经是false了,也就是说无论后面是结果是“真”还是“假”,整个语句的结果肯定是false了,所以系统就认为已经没有必要再进行比较下去了。也就不会再执行了,这种理象就是我们所说的短路现象。

四、位运算符
          所有的数据、信息在计算机中都是以二进制形式存在的。我们可以对整数的二进制位进行相关的操作。这就是按位运算符,它主要包括:位的“与”、位的“或”、位的“非”、位的“异或”。
        1)位的“与”,用符号“&”表示,它属于二元运算符。 与位运算值表:


A


B


A&B


1


1


1


1


0


0


0


1


0


0


0


0

         2)位的“或”用符号“|”表示,它属于二元运算符。。   或位运算值表:


A


B


A|B


1


1


1


0


1


1


1


0


1


0


0


0

          3)位的“非”,用符号“~”表示,它是一元运算符,只对单个自变量起作用。它的作用是使二进制按位“取反”。 非位运算值表:


A


~A


1


0


0


1

           4)位的“异或”,用符号“^”表示,它属于二元运算符。异或位运算值表:


A


B


A^B


1


1


0


0


1


1


1


0


1


0


0


0

/*测试位的四种运算*/

public class BitOperation
{
 public static void main(String[] args)
 {
  int a = 15;
  int b = 2;
  int x = a & b;
  int y = a | b;
  int z = a ^ b;
  System.out.println(a + "&" + b + "=" + x);
  System.out.println(a + "|" + b + "=" + y);
  System.out.println(a + "^" + b + "=" + z);
 }
}
输出结果:
                  15 & 2 = 2
                  15 | 2 = 15
                  15 ^ 2 = 13

五、移位运算符
        移位运算符的面向对象也是二进制的“位”。可以单独用移位运算符来处理int型数据。它主要包括:左移位运算符(<<)、“有符号”右移位运算符(>>)、“无符号”右移运算符(>>>)
        1)左移位运算符 
         左移位运算符,用符号“<<”表示。它是将运算符左边的对象向左移运动运算符右边指定的位数(在低位补0)。
        2)“有符号”右移运算符 
        “有符号”右移运算符,用符号“>>”表示。它是将运算符左边的运算对象向右移动运算符右侧指定的位数。它使用了“符号扩展”机制,也就是说,如果值为正,在高位补0,若为负,则在高位补1。
        3)“无符号”右移运算符
        “无符号”右移运算符,用符号“>>>”表示。它同“有符号”右移运算符的移动规则是一样的,惟一的区别就是:“无符号”右移运算符,它采用了“零扩展”,也就是说,无论值为正负,都在高位补0。

/*移位运算符测试*/

public class BitMotion
{
   public static void main(String[] args)
   {
     int a = 15;
     int b = 2;
     int x = a << b;
     int y = a >> b;
     int z = a >>> b;
     System.out.println(a + "<<" + b + "=" + x );
     System.out.println(a + ">>" + b + "=" + y);
     System.out.println(a + ">>>" + b + "=" + z);
    }
}
输出结果:
                 15 << 2 =60
                 15 >> 2 = 3
                 15 >>> 2 =3

六、赋值运算符
        赋值运算符是程序中最常用的运算符了,只要有变量的声明,就要有赋值运算。如a = 3;这里的a我们都知道是变量名,根据前面对变量的定义,我们可以知道这里的a实际上就是内存空间的一个名字,它对应的是一段内存空间,一在要在这个空间放入3这个值。这个放入的过程就实现了赋值的过程。
              赋值运算一览表


运算符


一般表示法


Java语言表示法


+=


a = a + b


a += b


-=


a = a - b


a -= b


*=


a = a * b


a *=b


/=


a=a / b


a /= b


%=


a = a % b


a %= b


>>=


a = a >> b


a >>= b


>>>=


a = a >>> b


a >>>= b

七、三元运算符
        三元运算符比较罕见,因为它有三个运算对象,但它也确实属于运算符的一种,因为它最终也是产生一个值。它也可以转化为条件判断语句,只不过这种处理方式更简洁、明了。
        它的运算过程是这样的:
         如果“布尔表达式”的结果是“true”,就返回值0;
         如果“布尔表达式”的结果是“false”,就返回值1;
         它的返回值做为最终结果返回。

八、逗号运算符
        在Java中,逗号运算符的惟一使用场所就是在for循环语句中。

九、字符串运算符
        “+”号这个运算符,在Java中有一项特殊的用法,它不仅起到连接不同的字符串,还有一种隐式的转型功能。

十、转型运算符
        转型运算符可以说是一种特殊的运算符,它是将一种类型的数据或对象,强制转变为另一种类型。

/*强制转型测试*/

public class TypeTran
{
   public static void main(String[] args)
   {
     int x ;
     double y;
     x = (int)22.5 + (int)34.7;  //强制转型可能引起精度丢失
     y = (double)x;
     System.out.println("x = " + x);
     System.out.println("y = " + y);
   }
}
输出结果:
                  x = 56
                  y = 56.0
分析:
          可以发现,由于强制转型,使数据精度丢失。系统会忽略强制转型的检查。所以对于强制转型,必须清楚转型是否可行。

         最后总结一下运算符的优先级


运算符


优先级


括号()


1最高


++、--


2


~、!


3


*、/、%


4


+、-(减)


5


<<、>>、>>>


6


>、<、>=、<=


7


==、!=


8


&


9


^


10


|


11


&&


12


||


13


? :


14

时间: 2024-08-31 03:04:45

Java运算符的相关文章

使用InfoSphere Streams的自定义Java 运算符和ICU4J实现实时音译

集成 Java 音译模块和 InfoSphere Streams 的自定义 Java 运算符 简介 在成长型市场区域中,任何解决方案提供商面临的首要挑战是可用数据的方言和语言学的不一致性.由于成长型市场区域中拥有包括英语在内的多种官方语言,所以地区的语言符号逐渐嵌入到了英语符号中.因此,您首先需要执行音译来实现数据中的一致性,然后再继续执行处理/文本分析. 如果使用预定的语言,那么数据音译会为您提供更统一.更一致的结果.本文将介绍使用 InfoSphere Streams 的自定义 Java 运

java运算符总结

下面这个例子向大家展示了如何随同特定的运算符使用主数据类型.从根本上说,它是同一个例子反反复复地执行,只是使用了不同的主数据类型.文件编译时不会报错,因为那些会导致错误的行已用//!变成了注释内容.   //: AllOps.java // Tests all the operators on all the // primitive data types to show which // ones are accepted by the Java compiler. class AllOps

java运算符+=引出的问题,希望搞明白

问题描述 java运算符+=引出的问题,希望搞明白 short s = 3; s = s + 5; s += 5; 运算结果是 s = s + 5; 这句话编译错误,因为 s+5后,数值类型强制转换成了int型, 再赋值给一个short变量是,会丢失精度,出现编译错误 但是s += 5: 这个运算过程是怎样的,原理是什么,为什么这个就可以编辑通过呢? 解决方案 隐式类型转换可以从小到大自动转,即byte->short->int->long 如果反过来会丢失精度,必须进行显示类型转换 s=

java运算符的先后顺序

问题描述 java运算符的先后顺序 *= << % sizeof 由低至高的正确顺序 求大神 解决方案 http://www.cnblogs.com/gw811/archive/2012/10/13/2722752.html 解决方案二: 首先,java没有sizeof这个运算吧,其次,算术运算符优先移位运算符,而算术运算符之间按先后顺序. 所以顺序应该是,有高到低应该是:*=,%,<< 解决方案三: 苏小喵的很全,但不是很容易记忆.我有两条规则可以帮你迅速记住谁先谁后(最里的小括

java运算符的优先级和%取模

问题描述 java运算符的优先级和%取模 int a=2 ; int b=a+3*a++ ; b的输出值为什么是8 不是9吗怎么变成8啦 解决方案 ++优先级虽然高,但是第一个a编译器先对它取值了.也许你觉得第一个a应该是a自增1以后的值.但是编译器不这么认为.这种代码在C++中是未定义行为的代码,换言之语法规范没有规定结果是多少,不同的编译器可以产生不同的结果.我不清楚Java中有没有规定,但是可以肯定的是,这种模棱两可的代码绝对不要在你写程序的时候写出来. 解决方案二: 这段代码的正确写法取

Java运算符优先级(转)

Java运算符优先级   序列号 符号 名称 结合性(与操作数) 目数 说明 1 . 点 从左到右 双目   ( ) 圆括号 从左到右     [ ] 方括号 从左到右     2 + 正号 从右到左 单目   - 负号 从右到左 单目   ++ 自增 从右到左 单目 前缀增,后缀增 - - 自减 从右到左 前缀减,后缀减 ~ 按位非/取补运算 从右到左 单目   ! 逻辑非 从右到左 单目 "!"不可以与"="联用 3 * 乘 从左到右 双目   / 除 从左到右

Java 运算符

Java运算符其实没什么可以说的,只需要按照数学上的内容进行即可.但是有几点还是需要进行理解和梳理的:自增(++)自减(--)运算符说白了就是在自己的基础上进行加1或者减1; class oprtator{ public static void main(String[] args) { int i = 10; i++;//相当于:i = i+1 System.out.println("i++等于:"+i); int b = 10; b--;//相当于:b=b-1 System.out

Java运算符&amp;gt;、&amp;gt;&amp;gt;、&amp;gt;&amp;gt;&amp;gt;三者的区别_java

>表示大于,如:if(a>b)...结果是boolean类型 >>表示带符号右移,如:int i=15; i>>2的结果是3,移出的部分将被抛弃. 转为二进制的形式可能更好理解,0000 1111(15)右移2位的结果是0000 0011(3),0001 1010(18)右移3位的结果是0000 0011(3). >>>无符号右移: 按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补零.对于正数来说和带符号右移相同,对于负数来

java运算符常规操作规则

使用运算符的一个缺点是括号的运用经常容易搞错.即使对一个表达式如何计算有丝毫不确定的因素,都容易混淆括号的用法.这个问题在Java里仍然存在. 在C和C++中,一个特别常见的错误如下: while(x = y) { //... } 程序的意图是测试是否"相等"(==),而不是进行赋值操作.在C和C++中,若y是一个非零值,那么这种赋值的结果肯定是true.这样使可能得到一个无限循环.在Java里,这个表达式的结果并不是布尔值,而编译器期望的是一个布尔值,而且不会从一个int数值中转换得

java运算符的优先级

运算符的优先级决定了存在多个运算符时一个表达式各部分的计算顺序. Java对计算顺序作出了特别的规定. 其中,最简单的规则就是乘法和除法在加法和减法之前完成.程序员经常都会忘记其他优先级规则,所以应该用括号明确规定计算顺序. 例如: A = X + Y - 2/2 + Z; 为上述表达式加上括号后,就有了一个不同的含义. A = X + (Y - 2)/(2 + Z);