Java 基本运算符

本文详细介绍了Java中的各种运算符,包括算术运算符(加减乘除、取余),二元运算符(自增自减),关系运算符,逻辑运算符(与、或、非),位运算符,条件运算符(三元运算符)以及扩展赋值运算符。同时,文章通过示例代码展示了这些运算符在实际编程中的应用和区别。
摘要由CSDN通过智能技术生成

Java 语音支持如下运算符

1.  算术运算符: + , - ,  *, /,%,++,--

二元运算符

这就是我们平常生活中的加减乘除,%是我们数学中的取余的意思也叫模,比如a%b意思就是a这个数除以b的余数++是自加一,--是自减1我们可以用代码来看一下

    int i=10;
    i++; //10+1
    System.out.println(i); // 11
    i--; //11-1
    System.out.println(i); // 10

 

我们可以看到输出的结果和我们想的是一样的,++和--也就是自增和自减比如a++也就是a=a+1 ,--也是如此 ,这是我们的一元运算符,接下来我们来看一个进阶一点的

    int a=1,b=1;
    a=b++;
    System.out.println(a);
    System.out.println(b);

大家可以先想一下输出的结果是什么 再看下面的运行结果看看想的对不对

大家看到输出的结果后,大家肯定会疑惑b++后,b的值不应该是2了吗为什么赋值给a输出的缺是1呢,因为a=b++,b是先把自己的值赋值给a然后再自加的,--亦是如此,我们再来看一个

    int a=1,b=1;
    a=--b;
    System.out.println(a);
    System.out.println(b);

大家可以再想一下这次的输出结果是什么

我们可以看到输出结果a是0,b也是0 这是为什么呢,因为a=--b,在运算的时候我们的b是先进行了了自减然后再赋值给a的,b的值是1自减1也就是0,a=++b也是同样的道理,++和--的位置不同结果也是不会有所不同的
 

接下来我们再来拓展一个东西

    long a=1433223143322L;
    int b=143;
    short c=10;
    byte d=8;
    System.out.println(a+b+c+d); //结果是long 类型的
    System.out.println(b+c+d);//结果是int 类型
    System.out.println(c+d);//结果是int 类型

我们看到第一次输出了这么长的数字那么毋庸置疑结果是long类型,那么我们看第二个输出的是161是int类型没有问题,第三个输出的18还是int类型,我们来分析下为什么哈,如果这么多操数中操作有一个数是long类型那么这个结果类型也为long,如果没有long的话那么结果都为int的无论你是不是有int操数c+d返回的也是int类型,如果其中有double类型那么结果一定是double类型



2.  赋值运算符:=

这就很简单了这就是赋值的意思a=b;把b的值赋值给a



3.  关系运算符:>,   <,  >=, <=, ==, !=instanceof

这也是我们数学中的大于小于和大于等于以及小于等于,==在我们java中是等于的意思单个等于是赋值的意思两个等于就是等于的意思,!=这个就是不等于的意思而我们instanceof大家知道一下就可以了以后我们面向对象要学

我们先来知道一下关系运算符返回的结果:要么是正确,要么是错误那我们在java中正确和错误是用什么来表示的呢,没错是布尔值啊,所以它的结果一定是布尔值,正确为true   错误为false,我们可以写些代码来测试一下

    //关系运算符返回的结果: 正确,错误 布尔值
    int a=10;
    int b=20;
    int c=21;
    //取余 模运算
    System.out.println(c%a);// c/a  21/10=2......1

    System.out.println(a>b);
    System.out.println(a<b);
    System.out.println(a==b);
    System.out.println(a!=b);

我们先来看第一个运算c%a意思是c对a进行取余运算21除以10的余数是1没有问题,第二个a>b变量a的值是10变量b的值是21很显然是不对的所以结果为假也就是false,第三a<b  10小于21所以结果为真也就是true,第四个a==b 显然a和b是不相等的所以结果为假,最后一个a!=b  10和21不相等所以结果是真,我们接下来运行程序来看一下结果是不是和我们说的一样

我们可以看到结果是没有问题的


4.  逻辑运算符:&&,||,!  与 或 非

&&(与 and):意思就是我和你两个都必须有
||(或 or):意思就是我或者你
!(非  取反):不是你就是我

我们一定要多和代码打交道接下来我们来用代码看下

    // 与(and)  或(or) 非(取反)
    boolean a=true;
    boolean b=false;

    System.out.println("a && b:"+(a&&b));//逻辑与运算:两个变量都为真结果才为 true  真
    System.out.println("a || b:"+(a||b));//逻辑或运算: 两个变量有一个为真,则结果才为 true 真
    System.out.println("! (a && b):"+!(a&&b));//逻辑非运算:如果是真,则变为假,如果是假则为真

首先我们先定义两个布尔值的变量a和变量b让a等于真,b等于假,我们可以用过一个+号让我们的结果和字符串拼接起来

接下来我们来看第一个逻辑与运算,我们可以打一个括号大家都知道括号里面的东西是会优先执行的,逻辑与只有两个变量结果都是真的情况下才是真否则都是假,a&&b变量a是真b是假有一个是假所以结果就是假也就是false

第二个逻辑或,逻辑或运算恰恰和逻辑与相反逻辑或只有两个变量的结果都是假的情况下结果才为假否则就为真,也就是只要两个变量结果有一个为真结果就是真,a||b其中a为真所以结果为真也就是true

第三个逻辑非,逻辑非运算简单点来说就是真变假  假变真,!(a&&b)我们知道a&&b的结果为假那么非假也就是真所以运算结果为真

我们用代码运行来看下结果对不对

我们可以看到结果和我们计算的是一样的没有问题哈

除了这些情况我们还有个情况叫短路叫短路运算什么意思呢我们知道逻辑与运算两个结果都为真结果才为真,假设我们把a&&b换一下位置变成b&&a,b是假的a是真的但是我们一上来就发现b是假的我们还需要去计算后的吗是不是就不需要了呢,这个就叫做短路了第一个结果为假结果就会直接返回假就不会计算后面的东西了就没有意义了,不相信的话咱们可以用代码来验证一下

    //短路运算
    int c=5;
    boolean d=(c<4)&&(c++<4);
    System.out.println(d);
    System.out.println(c);

我们定义一个变量a让他等于5,我们再来定义一个布尔值变量d让他等于c<4,c肯定不小于4所以他会返回一个假我们再让他来进行&&的运算让它再比较一下c++<4也就是 d=(c<4)&&(c++<4),我们上面提到只要第一个结果为假后面的就不再执行了,c<4为假所以结果会直接返回假,如果后面的代码执行了的话c++之后我们的c是不是会变成6而不是5了呀,但是如果没有执行的话我们的变量c还依然是5,我们再来输出一下d和a来看一下结果究竟是什么

首先这个d肯定是错的第一个输出结果为假没有问题,我们可以看到第二个输出的结果是5并不是6,如果后面的代码执行了是不是c就变成6了所以说短路了它后面的代码更本没有被执行


5.  位运算:&,|,^,~,>>, <<,>>>(了解! ! !)

我们先来一个多行注释,我们先写两个值让A=0011  1100   B=0000  1101  这是一个位哈它是一个二进制数字我们可以看到前三个&  |  ^ 是我们的与或非运算和我们上面学的逻辑是一样的,但是这里是单个所以是位运算,不要轻易的去用位运算是很容易出错的,我们用代码来看一下是什么意思

    /*
        A=0011  1100
        B=0000  1101
        -----------------------------
        A&B= 0000 1100
        A|B= 0011 1101
        A^B= 0011 0001
        ~B = 1111 0010
    */

首先我们来看第一个A&B,我们可以看到上面是两个二进制数,我们可以看到A的第一位是0,B的第一位也是0,0就表示假1就表示真我们都知道逻辑与是两个数都为真结果才为真否则就为假,所以第一位我们得出结果是0我们再来看第二位的运算依然是0第三位A是1 B是0结果依然是0全部计算完后我们就会得出A&B的结果为 0000  1100

第二个A|B,逻辑或运算和逻辑与运算恰恰相反只要两个数都为假的情况下才为假否则就为真,我们可以看到A和B的第一位都是0两个数都为假所以结果就为0,第二位同样也是,第三位A为1也就是真所以结果就是真也就是1,全部计算完后A|B的结果就是 0011 1101

 第三个A^B,^这个符号叫异或,什么意思呢就是如果两个位值相同则为0否则就为1,A和B的第一个都是0所以结果为0第二位也是如此,第三位A是1 B是0两,个值不相同所以为1,全部计算完后A^B的结果就是0011  0001

第四个 ~B,是取反的意思比如我们的B是0000  1101 那么~B就是把B的值反过来0变成1 1变成0 所以~B的结果是 1111 0010

接下来我们来看一道常见面试题是和位运算相关的,他问你2*8怎么运算是最快的,大家都知道2*8是等于16的但是我们的计算机是不知道的,我们可以把2*8拆分成2*2*2*2,在我们的位运算里面是非常快的,我们计算机在正常情况下计算会比较麻烦的会在底层做非常多的事情,我们的位运算除了& | ^ ~  这些还有我们的<< 和>> 这代表我们的左移和右移,这个箭头指向哪边就是往哪边移动的哈,接下来我们来看一下这个左移和右移的区别

我们先来输出一下2<<3的结果是什么

我们可以看到输出了16,大家这时候就要疑惑了2移了一下怎么就变成16了呢 ,接下来给大家分析一波比如咱们现在有8位

二进制: 逢二进一

0000   0000  是不是就代表我们的0呀
0000   0001  在二进制中是不是就代表我们的1呀
0000   0010  就是我们的2
0000   0011  就是我们的3
0000   0100  就是我们的4
0000   1000  就是我们的8
0001   0000  就是我们的16

我们可以很轻易的发现把数字移动一位它的数字是不是就变大了比如2 是 0000  0010  我们向左移动一位就变成了  0000  0100 就变成我们的4了那同理我们的4往左移一位是不是就变成我们的8了,所以左移和右移它会做一些操作,这个左移就相当于把数字乘以2,右移就相当于把数字除以2,这个需要死死的记在心里它的效率是极其高的


6.  条件运算符:X   ?   Y  :  Z      三元运算符

X  ? Y  : Z  什么意思呢,就是如果我们的X值是真的,就是如果X等于真的也就是等于true,则结果为Y,否则结果为Z

我们用代码来测试看一下哈

    //x ? Y : z
    // 如果x==true 则结果为Y  否则结果为Z

    int score=80;
    String type= score<60 ? "不及格":"及格"; //必须掌握

    System.out.println(type);

我们首先定义一个成绩score让它等于80分比如说它这个成绩如果小于60分我们就就让他等于不及格,否则呢就让他等于及格,这个我们是不是会返回出一个结果呀这个结果我们用一个String类型来接收一下,我们再来分析一下是不是score这个成绩如果它小于60分它就会执行这个不及格,如果它及格了是不是就会给type赋值一个及格,整个东西它就会返回不及格和及格这两个值就是通过score<60?来判断的,X就是我们的score<60如果他的结果是true就会返回不及格否则就会返回及格,咱们来输出看一下哈

我们可以看到是及格没有问题的哈,如果我们改成50的话是不是就会输出不及格了呀,这个是比较偷懒的,虽然是比较偷懒的但是这个是需要我们必须掌握的哈,这个可以让代码更加精简和便于理解的哈


7.  扩展赋值运算符:+=,-=,*=,/=

这个是比较偷懒的我们用代码写一下来看一下哈

    int a=10;
    int b=20;
    a+=b;
    System.out.println(a);
    a-=b;
    System.out.println(a);
    

大家可以先想一下输出的结果是什么呢,a+=b也就是等同于a=a+b,a-=b也就等同于a=a-b,乘和除也是如此,那么代码中的a+=b是不是就等于10+20所以我们的第一个输出结果是30,a-=b也就是30-20 结果也就是10,我们可以运行代码来看下结果是不是和我们说的一样

我们可以看到输出结果是30和10没有问题的哈,还是非常简单的但是在新手期是不建议大家偷懒的哈正常用a=a+b就可以了哈

接下来给大家扩充一个字符串连接符  +  ,大家是不是都知道+是把两个数相加的意思呀我们用代码跑一下来看一下

好没有问题,那么如果我们在前面加个字符串会变成什么呢我们来看一下

我们可以看到输出的是1020并没有输出我们想的30,它没有去进行a+b而是把a和b连接起来了,这因为在我们的加号运算符两侧只要出现我们的String类型也就是我们的字符串类型,它就会把另外一个操作数和其他操作数都转换为String再进行连接,这个地方也会有道面试题哈,我们再来写一个

他会问你 "  "+a+b 和 a+b+"   " 的区别是什么呢 ,咱们来运行看一下最后的结果

咱们可以看到上面是输出了1020但是下一个是输出了30呀这是为什么呢,这是因为如果这个字符串在前面那么他后面就会被拼接,如果这个字符串在后面那么它前面依然会进行运算,这是一个细节哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值