Java操作符
2017-10-20 11:32
92 查看
在最底层,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是否会改变?
答案是:会改变;实际上传递的是一个引用,所以还是会改变
三. 算术操作符
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。
一. 操作符定义
操作符作用于操作数,生成一个新值,能够接受一个或多个参数,并产生一个新值。注意:几乎所有的操作符都只能操作基本类型的数据(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。
相关文章推荐
- 【java基础】类型转换操作符
- Java 8 之 Stream 操作符
- java的String类,equals函数和比较操作符==的区别
- Scala讲座:函数、操作符及与Java的比较
- Java学习笔记6 —— 操作符
- Java学习笔记3-操作符
- Java编程思想——操作符
- java操作符学习过程(四)
- Java的常用操作符
- 浅谈Java操作符与其优先级
- java操作符
- Java基础(三) Java变量、操作符及判断和循环语句
- java中没有2进制的数据类型,对二进制的操作,需要使用共三种操作符
- Java操作符拆箱之坑
- Rx_java(5)Rx_java2操作符(Map、Flatmap)介绍-登录并获取用户信息小案例
- [《think in java》学习——操作符]自增自减符号和表达式执行的顺序
- [转]整理关于java的String 类,equals函数和比较操作符的区别
- 再读thinking in Java -- 第三章 操作符 &amp; 第四章 控制执行流程
- Java学习总结之第三章 操作符
- 从头认识java-2.5 三元运算符和字符串操作符