从”JAVA“而终 5:java的运算符

来源:互联网 发布:服务器防火墙开放端口 编辑:程序博客网 时间:2024/06/05 07:55

通过“HelloWorld”程序的编写,我相信你对java 学习会有一种迫不及待的感觉。前面讲解了java的基本数据,下面我们要学习的就是操作符,就是对他们进行操作的符号。说得简单点就是数学上的+-*/符号。java的操作符主要分:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、类型转行运算符等。

这里补充一点知识:在计算机中,所有的数值操作都是以加法的形式进行的。可能你要问那减法甚至乘法和除法怎么办呢?举个简单的例子,2减1,计算机可以把它当成2加上-1,而2乘以2可以当成两个2相加。计算机内部实现减法是把要减去的那个数转换成二进制再取反,然后再用2的二进制数加上这个取反的数。

    步入正题,开始java的运算符介绍。首先我要列一个标准的表达式出来:int a = 3+1;这句话表示了什么意思呢?首先是在内存中开辟两个空间,分别给3和1,然后再把它们的和赋值给a这个变量(a变量也是存在栈内存中,后边的学习会告诉这些原理)。在java中我们在申明(定义)一个变量的时候必须指明类型,否则创建是不会成功的。这也是java面向对象的一种体现。在java中+、-、*、/、>、<、<=、>=他们的使用和数学上是一样的,比如,int a = 3*2+1;这个时候a就等于7。它的运算顺序(优先级别)和数学上是一样的。另外需要注明的一点是几乎所有的操作符都只能操作“基本数据类型”例外的是“=”、“==”、“!=”、“+=”;“=”:赋值运算符,把一个值赋给一个对象;“==”:比较运算符,比较两个对象是否相等;“!=”:比较运算符,比较两个对象是否不相等;“+=”:累加运算符,a +=1;表示把a+1的值再赋给a 。在很多java编程中很多人都会对下面的例子产生疑惑:

int a = 1;

int b = 1;

a++;

++b;

System.out.println(a);

System.out.println(b);

结果是什么?a++;表示将a的值赋给a后再加上1;++b;表示将b的值加上1后再赋值给b;这个只有在循环中才会体现出来。

&和&&有什么区别?&&短路运算符,如果左边为false将不作右边的判断;

==和equals的区别:  ==比较的是2个对象的地址(引用),而equals较为复杂,它默认的是比较引用和==一样(如果我们自己写的类没有覆盖/ 重写该方法就比较的是引用);像java类库中的类大多实现了equals方法,它们比较的时候比较的是2个对象的内容。显然在覆盖了该方法的情况下,当equals为true时,==不一定为true。

注:equals不使用于基础数据类型,因为这个方法比较的是两个对象,而基础数据类型不算是对象(这也是很多人说java不是全部面向对象的原因)。

再此我就不一一讲解java的各运算符的作用,大家如果有需要可以参考这篇文章:http://blog.csdn.net/is_zhoufeng/article/details/8112199

位运算符的讲解:
 有符号正整数左移位(<<)
//   例:7<<2
//   步骤:
//    1:将整数7转化为二进制数(7的二进制为111)
//    2:111 左移两位变成 11100(有符号左移低位补0)
//    3: 二进制的11100对应整数为:28
  
//  有符号负整数左移位(<<)
//  例:-7<<2
//  步骤:
//   1:将整数7转化为二进制数(7的二进制为111)
//   2:将二进制111取反加1,
//   得到:                11111111111111111111111111111001
//   然后左移两位变成:    11111111111111111111111111100100(有符号左移低位补0)
//   3: 二进制的11111111111111111111111111100100对应整数为:-28  
//  
//  有符号正整数右移位(>>)
//   例:7>>2
//   步骤:
//    1:将整数7转化为二进制数(7的二进制为111)
//    2:111 右移两位变成 001(有符号正数右移高位补0)
//    3: 二进制的001对应整数为:1
  
//  有符号负整数右移位(>>)
//  例:-7>>2
//  步骤:
//   1:将整数7转化为二进制数(7的二进制为111)
//   2:将二进制111取反加1,
//   得到:                11111111111111111111111111111001
//   然后右移两位变成:    11111111111111111111111111111110(有符号负数右移高位补1)
//   3: 二进制的11111111111111111111111111111110对应整数为:-2
  
//  无符号正整数右移位(>>>)
//  例:7>>>2
//  步骤:
//   1:将整数7转化为二进制数(7的二进制为111)
//   2:111 右移两位变成 001
//   3: 二进制的001对应整数为:1 
  
//  无符号负整数右移位(>>>)
//  例:-7>>>2
//  步骤:
//   1:将整数7转化为二进制数(7的二进制为111)
//   2:将二进制111取反加1,
//   得到:                  11111111111111111111111111111001
//   然后右移两位变成:        111111111111111111111111111110(无符号右移高位补0)
//   3: 二进制的111111111111111111111111111110对应整数为:1073741822 

 

0 0