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>3
if(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
{
// 是同性恋不允许结婚
}
}
}
复习笔记4 比较运算符
最新推荐文章于 2023-10-15 19:50:55 发布