Java操作符

来源:互联网 发布:owncloud php组件 编辑:程序博客网 时间:2024/06/10 02:56

      在最底层,Java中的数据时通过使用操作符来操作的。Java是建立在C++基础之上,Java在操作符上做了一些改进与简化。下面我们对操作符进行详解。

    一. 操作符定义

          操作符作用于操作数,生成一个新值,能够接受一个或多个参数,并产生一个新值。注意:几乎所有的操作符都只能操作基本类型的数据(Java基本类型数据)。例外的操作符是:"=","=="和"!=",这些操作符能操作所有的对象。

   二. 赋值操作符

       赋值使用操作符“=”。它的意思是将“=”号右边的值赋给左边。注意:右边可以是任意常数,变量或者表达式,左边必须是一个明确的变量,即为,左边必须有一个确定的物理空间去存储等号右边的值。

       这里面有一些地方对初学者来说非常容易出错:

       第一种情况:a = b;b = b+1;(a,b均为基本类型数据)此时a的值是否会变?

       答案是:不会变;原因如下(引用Thinking IN Java):基本类型存储了实际的数值,而非指向一个对象的引用,在对其进行赋值的时候,直接将一个地方的内容复制到另外一个地方。其原来地方的改变不会影响后面的变量值。

       第二种情况:a = b;(a,b均表示变量),b或者a改变时,其他是否会改变?

       答案是:会变。原因如下:在对一个对象进行操作时,我们真正操作的对象是对象的引用,所以“a = b”是将b的引用复制给a,a与b都指向原来b指向的对象。我的理解是a与b都是起到指针的效果,a = b是将b指针指向的对象地址复制给a,a也指向了该对象,因此无论a或者b对对象进行操作,对象都会改变!

      第三种情况:下面代码中a是否会改变?

void f(A a){  a.x = 'c';}public void static void main(String[] args){   A a = new A();   a.x = 'a';   f(a);System.out.println(a.x)}

        答案是:会改变;实际上传递的是一个引用,所以还是会改变

      三. 算术操作符

        Java基本算术操作符与其他大多数语言是一样的,包括:加(+),减(-),乘(*),除(/),取模(%)。注意:整数除法会直接去掉结果的小数位,而不是四舍五入。

        其余一些常见的一元操作符(例如:+=,--.++,)就不详细说明了,相信大家平时敲代码时会用到。

     四. 关系操作符

           关系操作符产生的是一个布尔结果,计算的是操作数之间的关系,包括:>,<,>=,<=,==,!=。这里我们就要说下==与equals的区别了(笔试面试中经常被问):

1.值类型是存储在内存中的栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中;2.==操作对于基本类型比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同;3.equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同;4.==比较的是2个对象的地址,而equals比较的是2个对象的内容,显然,当equals为true时,==不一定为true。

五. 逻辑操作符

  Java逻辑操作符:&&(与),||(或),!(非)。&&的仅在两边都为true时,返回true,否则返回false;||仅在两边都是false时,返回false,否则返回true。

六.按位操作符

按位操作符来操作整数基本类型数据中的单个bit,即为二进制数。按位操作符会对两个参数中对应的位执行布尔操作。Java按位操作符:

按位与(&):两个位置上的数均为1,则输出1;否则输出0

按位或(|):两个位置上的数只要有一个是1,则输出1;否则输出0;

按位非(~):取反操作

异或(^):两个位置上的数相同为0,不同为1。比如:一个整型数组里除了一个数字之外,其他的数字都出现了两次。请找出这个数字。

我们可以使用异或来解决这个问题,把数组里的所有元素全部进行异或操作。由于异或操作的交换律和结合律我们知道,所有出现了两次的数字,都与自己先结合进行运算,那么结果就是0,最后,剩下的那个数字就是要找的数字。

七. 移位操作符

移位操作符的对象也是二进制数,位移操作符只能用来处理整数类型的数据!!Java移位操作符:左移位操作符(<< n):按照符号右侧指定的位数将操作数向左移动,低位补0;右移操作符(>> n):向右移动,若操作数为正数高位补0,若为负数高位补1。无符号右移操作数(>>>),高位均补0。

 


原创粉丝点击