复习笔记4 比较运算符

来源:互联网 发布:图形推理 知乎 编辑:程序博客网 时间:2024/04/28 05:44
public class Test5{public static void main(String[] args){//比较运算符int x = 5;System.out.println(x > 5);System.out.println(x < 5);System.out.println(x == 5);System.out.println(x != 5);System.out.println(x >= 5);System.out.println(x <= 5);//判断左边的对象属于右侧的类型System.out.println("asd" instanceof String);System.out.println("========================================>");//逻辑运算符// & 逻辑与//当两侧都为真时为真//当有一个为假时为假//那么考虑一个问题,如果每次我们都需要//进行左右两边的对比,是不是很慢呢System.out.println(true & true);System.out.println(true & false);System.out.println(false & true);System.out.println(false & false);System.out.println("========================================>");//&& 逻辑与的短路//由逻辑与的特性可以直到,一个为假就为假//在考虑程序由左到右运算,那么第一个为假//是不是就不用看右边了?//&&运算符的对比 & 会提高一点点效率,但//仅在第一个为假时System.out.println(false && true);//这个虽然有一个假,但也必须比较两个值//程序在拿到左边真时并不知道后边是假,//所以这里t && f 和 t & f 是一样的System.out.println(true && false);System.out.println("========================================>");// | 逻辑或//跟 & 正好相反//当一个为真时就为真//当都为假时才为假System.out.println(true | true);System.out.println(true | false);System.out.println(false | true);System.out.println(false | false);System.out.println("========================================>");// || 逻辑或的短路// 跟上边那个一样,当第一为真时,不看后边System.out.println(true || false);System.out.println("========================================>");// ! 逻辑非//非真为假,非假为真System.out.println(!true);System.out.println(!false);System.out.println("========================================>");// ^ 异或//两个相同时为假,不同时为真System.out.println(true ^ true);System.out.println(true ^ false);System.out.println(false ^ true);System.out.println(false ^ false);System.out.println("========================================>");//单个& |由于效率问题,基本不会用到//这一现象仅在逻辑上,也就是布尔运算//判断x>2 并且 x<4// & 方式x  = 1;if(x > 2 && x < 4){// code ...}//该表达式与上边的是一样的if(x > 2){if(x < 4){// code ...}}//观察这个代码,如果要合并的话怎么做?//还像上边那样是否还可以呢?if(x > 2){if(x < 4){// code ...}else {// code ...}}//仔细观察,发现代码不对,为什么呢?这里//的else里,包括了x<3 和 x>3,而我们要的//else是只要x>3if(x > 2 && x < 4){// code ...}else {// code ...}//这样虽然正确,但达不到我们的预期目的,也//就是说合并不了,这个问题实际上是作用域的//问题,合并逻辑表达式必须要内部作用域的//表达式是唯一作用域if(x > 2 && x < 4){// code ...}else if( x > 3){// code ...}//逻辑表达式的合并要考虑2方面内容,第一是否//内部作用域唯一,第二,是否其他的作用域会被//扩展,也就是说以后会用的System.out.println("========================================>");//考虑一个问题,这个表达式什么情况下进if?//是真的话进if,假进else对吧,那么我想反//过来怎么办?只能把表达式变成x<=5?x = 6;if(x > 5){// code ...}else{// code ...}//逻辑非就相当于把你逻辑调换过来//就像中国开车右侧行驶,有些国家//却是左侧行驶一样if(!(x > 5)){// code ...}else {// code ...}//假设我们用bool表示电源的开关,默认是关闭的//那么这个功能应该怎么写?boolean bool = false;//看起来写的不错,没有问题,但是不是有点麻烦?//一个应用程序中的bool标识符很多,表示很多东西//如果都这样写是不是会累死?if(bool){//关闭电源的代码bool = false;}else {//打开电源的代码bool = true;}//我们知道电源开关就两种状态,开和关,所以才用//布尔来表示,而每次按下开关,电源的状态是取非//这里的逻辑非也算一种简便用法if(bool){//关闭电源的代码}else {//打开电源的代码}bool = !bool;System.out.println("========================================>");//是人都知道同性恋必须是同性在一起对吧?谁反对?//假设我们用true表示男人,false表示女人//那么我们现在是民政局,如果两个人p1 和 p2 不是//同性恋我们允许他们结婚,如果是同性恋就不行boolean p1 = true;boolean p2 = true;//正常情况下我们都会这么写if(p1 != p2){// 不是同性恋,允许结婚}else{// 是同性恋不允许结婚}//异或的功能是两个不一样的为真,相同为假,也就是//说p1 ^ p2 如果为真,那就不是同性恋。//当然由于对比布尔表达式来说,你用!= 和 ^ 都可以//但是相信我,如果你用 ^ 绝对是亮点,很多老程序员//不经意间看见这个绝对愣神if(p1 ^ p2){// 不是同性恋,允许结婚}else{// 是同性恋不允许结婚}}}