JavaSE基础语法---运算符

目录

算术运算符

连接运算符

关系运算符

逻辑运算符

赋值运算符

条件运算符

位运算符

表达式的运算顺序



算数运算符

        算术运算符包含以下几种:+,-, * ,/,%,++,--

         '+'运算不止可以进行数值与数值之间的运算,还可以进行数值与char类型之间的运算。

        在这里我详细谈一下    ++(自增) 

        "++"分为'左++'跟'右++'

        左++是先运算后取值

        右++是先运算后取值

//1
public static void main (String args[]) {
     int num=0;
	 for (int i=0;i<100;i++) {
       num=++num;   
	 }  
	   System.out.println("num="+num);
	}
}
//2
public static void main (String args[]) {
     int num=0;
	 for (int i=0;i<100;i++) {
       num=num++;   
	 }  
	   System.out.println("num="+num);
	}
}

大家可以猜一下这两道题的答案分别是多少

(可能有的小伙伴没有看出来这两道题的区别)

区别在这里:

怎么样,知道正确答案了吗

接下来谢晓答案:

 

 为什么会造成这样的结果呢

这里我们必须先明确一个事实,那就是第一个num跟第二个num在底层运算里不在同一个位置

就叫它们num_1跟num_2吧

第一题

num=++num;

num_2先自增,然后赋值给num_1,所以,num_1的值会越来越大。

第二题

num=num++;

num_2先赋值给了num_1,然后num_2自增,这里num_2自增之后的值并没有赋给num_1,而在下一次循环中被覆盖。

感兴趣的可以去这个链接,这个博主讲的比较详细一点-->
图解i++和++i,从底层搞懂它们的原理https://blog.csdn.net/h380115990/article/details/107178947?app_version=5.9.0&code=app_1562916241&csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22107178947%22%2C%22source%22%3A%22weixin_69398310%22%7D&uLinkId=usr1mkqgl919blen&utm_source=app

(P.S:实际开发过程中一般不用++,而是+=,这种更容易理解)

连接运算符

        连接运算符主要用于连接字符串,其运算符为:+;

        +字符连接两个字符串,要求‘+’两端的类型必须一致,当 ‘+’ 运算的时候,两边的操作数都是数字的话,一定会进行求和运算只要其中有一个操作数是字符串类型,那么一定会进行字符串拼接运算,字符串拼接之后的结果还是字符串类型

    public static void main(String[] args) {
        int a=10,b=100;
        String c = "abc";
        System.out.println(a+b);//110
        System.out.println(a+c+b);//10abc110
    }

关系运算符

        关系运算符主要为:==,!=,<,>,<=,>=

        其中"<",">","<=",">="只能比较两个变量的大小,而"=="与"!=",不仅可以比大小,还可以进行引用类型的比较。

    public static void main(String[] args) {
        int a=10,b=100;
        int a1=10;
        String c = "abc";
        String d = "abc";
        System.out.println(a>b);//false
        System.out.println(a<=b);//true
        System.out.println(a!=a1);//false
        System.out.println(a==b);//false
        //字符串之间的比较
        System.out.println(c==d);//true

    }

        注意:比较运算符"==",切忌写成"="。

    public static void main(String[] args) {
        boolean winner = false;
        if(winner==true){
            System.out.println("日本");//这里==是比较符,winner!=true,
                                       //所以不输出
        }
        if(winner=true){
            System.out.println("中国");//这里=是赋值符,将true赋值给了winner,
                                       //所以输出的结果为中国
        }
    }

逻辑运算符

        逻辑运算符主要包含:& (与)   |(或)  !(非)  &&(短路与)  ||(短路非)

        所有逻辑运算符的操作数都是布尔型,它的结果也都是布尔型。

        细心的小伙伴可能已经发现&跟&&( | 跟 || )的结果是一样的,那既然结果是相同的,为什么Java还要把两个分开呢,这就要谈到&(与)跟&&(短路与)的区别了:

        虽然二者都是只要有一个为false,其结果就为false,但是

        &时,左边无论真假,右边都进行运算;

        &&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算;

        ( | 跟 || 同理)

        

public static void main(String[] args) {
    boolean state=false;
    int i=2;
    if((++i>2)&&(state=true)){  //i==3,true赋值给state
         i++;                   //i==4
    }    	  
    if((++i>4)||(state=false)){ //i==5,||短路或,true||(state=false),后面短路,不进行。
         i++; 
    }
        System.out .println (i);//i==6
        System.out .println (state);//state==true
}

赋值运算符

        赋值运算符主要包括 (基本赋值运算符) =,(扩展赋值运算符)+=,-=,*=,/=,%=

       "=" 左边的操作数必须是变量,不能是常量或表达式

        当"="两边数据类型不一致时,可使用自动类型转换或强制类型转换进行处理

        

        切记不要把"="跟 "=="混淆

        下面我们让来进行一个思考:

    public static void main(String[] args) {
        short a=2;
        a=a+2;//①
        a+=2; //②
    }

        这里的①跟②有没有区别,如果有区别是什么

      (答案当时是有了,不然我问这个问题干嘛)

        区别:a=a+2,a是short类型,如果直接进行a+2操作的话,会进行自动转换,将short转换为int

        ( 详解可参考我的上一篇博客:JavaSE基础语法---基本数据类型转换)

        而a+=2就不存在这个问题,虽然它的等效表达式也是a=a+2但是它不会进行隐式转换,

所以它的数据类型依旧是short。这也是为什么实际开发过程中"+="比"++"与"a=a+2"使用更频繁的原因。

条件运算符

        条件运算符是三目运算符,它的表达式为:<表达式1> ? <表达式2> :<表达式3> ;

        表达式1的返回类型是Boolean型,如果结果为true则返回表达式2,结果为false返回表达式3.

位运算

        程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作,这样可以是计算机更快的运转。

 在这里我们就不细谈了,以后有机会再详细讲讲

表达式的运算顺序

 

        

        

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值