[b]一、运算符[/b]
运算符包括下面几种:
算术运算符赋值运算符比较运算符逻辑运算符位运算符三目运算符
最不常用的是位运算符,但也是最接近计算机底层的。
[b]1、算术运算符[/b]
[url=http://images.cnitblog.com/blog/641601/201412/041952431236034.png][img]http://files.jb51.net/file_images/article/201609/2016090811130723.png[/img]
[/url]
(1)+的几种用法:加法、正数、字符串连接符
(2)除法的时候要注意一个问题:整数相除,只能得到整数。要想得到小数,可以将数据自身*1.0,即将数据自身先转换为浮点型。
[b]2、赋值运算符[/b]
符号 = += -= *= /= %=
注:=为基本的赋值运算符,其他的为扩展的赋值运算符
面试题:
(1)short s=1, s = s+1;
(2) short s=1, s+=1;
上面两个代码有没有问题,如果有,哪里有问题?
答案:代码(1)是有错误的,会损失精度,byte,short在定义的时候,他们接收的其实是一个int类型的值。这个是自己做了一个数据检测的,如果不再它们的范围内,就报错。效果如下:
[url=http://images.cnitblog.com/blog/641601/201412/041952445147575.png][img]http://files.jb51.net/file_images/article/201609/2016090811130724.png[/img]
[/url]
代码(2)没有错误,因为:扩展的赋值运算符其实隐含了一个强制类型转换。
也就是说,i += 1; 不是等价于 i = i + 1; 而是等价于 i = (i的数据类型)(s + 1);
[url=http://images.cnitblog.com/blog/641601/201412/041952457647860.png][img]http://files.jb51.net/file_images/article/201609/2016090811130725.png[/img]
[/url]
[b]3、关系运算符[/b]
[url=http://images.cnitblog.com/blog/641601/201412/041952466864945.jpg][img]http://files.jb51.net/file_images/article/201609/2016090811130726.jpg[/img]
[/url]
注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
注2:比较运算符“==”不能误写成“=” 。举例:
[url=http://images.cnitblog.com/blog/641601/201412/041952479676987.png][img]http://files.jb51.net/file_images/article/201609/2016090811130727.png[/img]
[/url]
[b]4、逻辑运算符[/b]
[url=http://images.cnitblog.com/blog/641601/201412/041952494836958.png][img]http://files.jb51.net/file_images/article/201609/2016090811130728.png[/img]
[/url]
(1)逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
(2)“&”和“&&”的区别?同理, “|”和“||”的区别?
A:最终结果都一样。例如:A和B必须同时为真,A&B、A&&B的结果才为真。B:&&具有短路效果,左边是false,右边不执行。||具有短路效果,左边是true,右边不执行。
注:开发中常用的逻辑运算符: &&,||,!
(3)异或( ^ )与或( | )的不同之处是:当左右都为true时,异或的结果为false。
[b]5、位运算符:[/b]
[url=http://images.cnitblog.com/blog/641601/201412/041952509367713.png][img]http://files.jb51.net/file_images/article/201609/2016090811130829.png[/img]
[/url]
虽然开发中用的不多,但会在很多源码中看到,因为计算机底层的计算都是位运算。
[b]面试题1:[/b]实现两个整数变量的交换
代码如下:
/*
面试题:请自己实现两个整数变量的交换
*/
class OperatorTest {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);
//方式1:使用第三方变量(开发中用的)
int c = a;
a = b;
b = c;
System.out.println("a:"+a+",b:"+b);
System.out.println("------------");
//方式2:用位异或实现(面试用)
//左边:a,b,a
//右边:a ^ b
a = a ^ b;
b = a ^ b; //a ^ b ^ b = a
a = a ^ b; //a ^ b ^ a = b
System.out.println("a:"+a+",b:"+b);
//方式3:用变量相加的做法
a = a + b; //a=30
b = a - b; //b=10
a = a - b; //a=20
System.out.println("a:"+a+",b:"+b);
*
//方式4:一句话搞定
b = (a+b) - (a=b); //b=30-20=10,a=20
System.out.println("a:"+a+",b:"+b);
}
}
[b]面试题2:[/b]请用最有效率的方式写出计算2乘以8的结果。
答案:2 * 8等价于2 << 3
知识回顾:
<<:左移 左边最高位丢弃,右边补齐0 >>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1 >>>:无符号右移 无论最高位是0还是1,左边补齐0
[b]6、三目运算符:[/b]
格式:(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
示例:
获取两个数中大数:
[url=http://images.cnitblog.com/blog/641601/201412/041952518263042.png][img]http://files.jb51.net/file_images/article/201609/2016090811130830.png[/img]
[/url]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。