ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaSE_05_运算符

2020-06-27 17:54:40  阅读:177  来源: 互联网

标签:05 int System 运算符 println JavaSE true out


知识框架

运算符概述

运算符是指对操作数的运算方式。组成表达式的 Java 操作符有很多种(什么是操作数和操作符,例如 1+2,其中 1 和 2 都是操作数,+是操作符,操作符和操作数联合起来构成表达式)。运算符按照其要求的操作数数目来分,可以有单目运算符(1 个操作数)、双目运算符(2 个操作数)和三目运算符(3 个操作数)。运算符按其功能来分,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符、字符串连接运算符和其他运算符。常见的运算符如下所示:

每个编程语言当中都有运算符,基本上都是通用的,这么多的运算符,它们同时出现的时候有优先级吗?答案是有的。那么如果不确定它们的优先级怎么办,其实很简单,直接加小括号就可以了,添加有小括号优先级一定是高的,所以优先级不需要死记硬背,不确定就加小括号,例如:1 + 2 * 3,想确保先求和,你就需要这样写:(1+2)*3。

算术运算符详解

算术运算符包括:+(两个数字求和)、-(两个数字相减)、*(两个数字乘积)、/(两个数字相除)、%(两个数字取模或者求余)、++(单目运算符,对数字自加 1)、--(单目运算符,对数字自减 1)。

算术运算符的注意问题

  • 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数则不可忽略。此外,取模运算的结果不一定总是整数。
  • 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 
  • “+”除字符串相加功能外,还能把非字符串转换成字符串
  • ​​​​一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种。

代码演示

public class Demo01Operator {
    public static void main(String[] args) {
        // 两个常量之间可以进行数学运算
        System.out.println(20 + 30);//50

        // 两个变量之间也可以进行数学运算
        int a = 20;
        int b = 30;
        System.out.println(a - b); // -10

        // 变量和常量之间可以混合使用
        System.out.println(a * 10); // 200

        int x = 10;
        int y = 3;
        //结果是商
        int result1 = x / y;
        System.out.println(result1); // 3
        //取模也叫取余,结果的符号与被模数的符号相同
        int result2 = x % -3;
        System.out.println(result2); //  1

        // int + double --> double + double --> double
        double result3 = x + 2.5;
        System.out.println(result3); // 12.5

    }
}

自增自减运算符

详解自增自减运算符

  • 基本含义:让一个变量涨一个数字1,或者让一个变量降一个数字1
  • 使用格式:写在变量名称之前,或者写在变量名称之后。例如:++num,也可以num++

使用方式:

  • 单独使用:不和其他任何操作混合,自己独立成为一个步骤。
  • 混合使用:和其他操作混合,例如与赋值混合,或者与打印操作混合,等。

使用区别:

  • 在单独使用的时候,前++和后++没有任何区别。也就是:++num;和num++;是完全一样的。

在混合的时候,有重大区别

  • 如果是【前++】,那么变量【立刻马上+1】,然后拿着结果进行使用。    【先加后用】
  • 如果是【后++】,那么首先使用变量本来的数值,【然后再让变量+1】。 【先用后加】

代码演示

public class Demo06Operator {
    public static void main(String[] args) {
        int num1 = 10;
        System.out.println(num1); // 10
        ++num1; // 单独使用,前++
        System.out.println(num1); // 11
        num1++; // 单独使用,后++
        System.out.println(num1); // 12
        
        // 与打印操作混合的时候
        int num2 = 20;
        // 混合使用,先++,变量立刻马上变成21,然后打印结果21
        System.out.println(++num2); // 21
        System.out.println(num2); // 21
        
        int num3 = 30;
        // 混合使用,后++,首先使用变量本来的30,然后再让变量+1得到31
        System.out.println(num3++); // 30
        System.out.println(num3); // 31
        
        int num4 = 40;
        // 和赋值操作混合
        int result1 = --num4; // 混合使用,前--,变量立刻马上-1变成39,然后将结果39交给result1变量
        System.out.println(result1); // 39
        System.out.println(num4); // 39
        
        int num5 = 50;
        // 混合使用,后--,首先把本来的数字50交给result2,然后我自己再-1变成49
        int result2 = num5--;
        System.out.println(result2); // 50
        System.out.println(num5); // 49
        
        int x = 10;
        int y = 20;
        // 11 + 20 = 31
        int result3 = ++x + y--;
        System.out.println(result3); // 31
        System.out.println(x); // 11
        System.out.println(y); // 19
        
        // 30++; // 错误写法!常量不可以使用++或者--
    }
}

比较运算符详解

比较运算符有6种关系,分别为小于、小于等于、大于、等于、大于等于、不等于。比较运算符的结果都是boolean型,也就是要么是true,要么是false。

             

注意事项:

  • 千万不要把“==”误写成“=”,"=="是判断是否相等的关系,"="是赋值。
  • 如果进行多次判断,不能连着写。数学当中的写法,例如:1 < x < 3程序当中【不允许】这种写法。

代码演示

public class Demo {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a == b); // false
        System.out.println(a != b); // true
        System.out.println(a > b); // false
        System.out.println(a >= b); // false
        System.out.println(a < b); // true
        System.out.println(a <= b); // true
        // 关系运算的结果肯定是boolean类型,所以也可以将运算结果赋值给boolean类型的变量
        boolean flag = a > b;
        System.out.println(flag); // false
    }
}

逻辑运算符详解

逻辑运算符主要包括逻辑与(&),逻辑或(|),逻辑异或(^),短路与(&&),短路或(||)。所有逻辑运算符的特点是操作数都是布尔类型,并且最终的运算结果也是布尔类型。逻辑运算符的基本运算规则如下表所示: 

注意事项:

  • 逻 辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写 成x>3 & x<6 。如果有多个条件,可以连续写。两个条件:条件A && 条件B 丶多个条件:条件A && 条件B && 条件C
  • 异或( ^ )与或 ( | )的不同之处是:当左右都为true时,结果为false。

“&”和“&&”的区别:

  • 单&时,左边无论真假,右边都进行运算;
  • 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。

“|”和“||”的区别:

  • 逻辑或|,无论左边真假,右边都要执行。
  • 短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。

​​​​​​​代码演示

public class Demo03Operator {

    /*


        用普通话描述的话:100 大于 99 并且 100 大于 98 ,有道理
        用代码描述的话:100 > 99 & 100 > 98 --> true
        true & true --> true

        非常重要:
            逻辑运算符两边要求都是布尔类型,并且最终的运算结果也是布尔类型。
            这是逻辑运算符的特点。

        100 & true 不行,语法错误。
        100 & 200 不行,没有这种语法。
        true & false 这样可以。

        100 > 90 & 100 > 101 --> false

        & 两边都是true,结果才是true
        | 有一边是true,结果就是true

    */
    public static void main(String[] args) {
        // 对于逻辑与&运算符来说,只要有一边是false,结果就是false。
        // 只有两边同时为true,结果才是true。
        System.out.println(true & true); // true
        System.out.println(true & false); // false
        System.out.println(false & false); // false

        System.out.println(100 > 90 & 100 > 101); // false
        System.out.println((100 > 90) & (100 > 101)); // false

        int a = 100;
        int b = 101;
        int c = 90;
        System.out.println(a < b & a > c); // true

        // 对于逻辑或呢?
        // 只要有一边是true,结果就是true。
        System.out.println(a < b | c > b); // true
        System.out.println(true | false); // true

        System.out.println(true | true); // true
        System.out.println(false | false); // false

        System.out.println(!false); // true
        System.out.println(!true); // false

        // 注意:这里需要加一个小括号。
        System.out.println(!(a > b)); // true

        /*
            关于短路与 &&,短路或 ||
            其中重点学习短路与,短路或照葫芦画瓢。

            短路与&& 和 逻辑与 &有什么区别?
                首先这两个运算符的运算结果没有任何区别,完全相同。
                只不过“短路与&&”会发生短路现象。

            什么是短路现象呢?
                右边表达式不执行,这种现象叫做短路现象。

            什么时候使用&&,什么时候使用& ?
                从效率方面来说,&&比&的效率高一些。
                因为逻辑与&不管第一个表达式结果是什么,第二个表达式一定会执行。

                以后的开发中,短路与&&和逻辑与还是需要同时并存的。
                    大部分情况下都建议使用短路与&&
                    只有当既需要左边表达式执行,又需要右边表达式执行的时候,才会
                    选择逻辑与&。
        */

        System.out.println(true & true); // true
        System.out.println(true & false); // false
        System.out.println(false & false); // false

        System.out.println(true && true); // true
        System.out.println(true && false); // false
        System.out.println(false && false); // false

        // 接下来需要理解一下什么是短路现象,什么时候会发生“短路”。
        int x = 10;
        int y = 11;
        // 逻辑与&什么时候结果为true(两边都是true,结果才是true)
        // 左边的 x>y 表达式结果已经是false了,其实整个表达式的结
        // 果已经确定是false了,按道理来说右边的表达式不应该执行。
        System.out.println(x > y & x > y++);

        // 通过这个测试得出:x > y++ 这个表达式执行了。
        System.out.println(y); // 12

        //测试短路与&&
        int m = 10;
        int n = 11;
        // 使用短路与&&的时候,当左边的表达式为false的时候,右边的表达式不执行
        // 这种现象被称为短路。
        System.out.println(m > n && m > n++);
        System.out.println(n); // 11

        // 问题:什么时候发生短路或现象?
        // || 短路或
        // “或”的时候只要有一边是true,结果就是true。
        // 所以,当左边的表达式结果是true的时候,右边的表达式不需要执行,此时会短路。

    }
}

赋值运算符详解

赋值运算符目前也是只需要掌握=、+=、-=、*=、/=、%=,其它和二进制相关的内容也是到后面遇到的时候再详细学习。赋值类的运算符包括基本赋值运算符(=)和扩展的赋值运算符(+=、-=、*=、/=、%=)。赋值运算符的作用是将一个表达式的值赋给左边,左边必须是可修改的,不能是常量。

                             

注意事项

  • 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制 类型转换原则进行处理。
  • 支持连续赋值。
  • 扩展赋值运算符: +=, -=, *=, /=, %=,扩展的赋值运算符隐含了强制类型转换。不改变原来的数据类型
  • 赋值运算符“=”右边优先级比较高,先执行右边的表达式,然后将表达式执行结束的结果放到左边的“盒子”当中。(赋值)

代码演示

/*
赋值运算符分为:
基本赋值运算符:就是一个等号“=”,代表将右侧的数据交给左侧的变量。
    int a = 30;
复合赋值运算符:
    +=        a += 3        相当于        a = a + 3
    -=        b -= 4        相当于        b = b - 4
    *=        c *= 5        相当于        c = c * 5
    /=        d /= 6        相当于        d = d / 6
    %=        e %= 7        相当于        e = e % 7
*/
public class Demo {
    public static void main(String[] args) {
        //把10赋值给int类型的变量i
        int i = 10;
        System.out.println("i:" + i);//10
 
        // += 把左边和右边的数据做加法操作,结果赋值给左边
        i += 20;
        //i = i + 20;
        System.out.println("i:" + i);//i:30
 
        //注意:扩展的赋值运算符底层隐含了强制类型转换
        short s = 10;
        s += 20;
        //s = (short)(s + 20);
        System.out.println("s:" + s);//s:30
    }
}

三目运算符详解

条件运算符属于三目运算符,它的语法结构是:布尔表达式?表达式 1:表达式 2。它的运行原理是这样的,先判断布尔表达式的结果是 true 还是 false,如果是 true,则选择表达式 1 的结果作为整个表达式的结果,反之则选择表达式 2 的结果作为整个表达式的结果。来看一段代码:
public class Demo04Operator {
    public static void main(String[] args) {
/*
运算符之六:三元运算符
1.结构:(条件表达式)? 表达式1 : 表达式2
2. 说明
① 条件表达式的结果为boolean类型
② 根据条件表达式真或假,决定执行表达式1,还是表达式2.
  如果表达式为true,则执行表达式1。
  如果表达式为false,则执行表达式2。
③ 表达式1 和表达式2要求是一致的。
④ 三元运算符可以嵌套使用
3. 
凡是可以使用三元运算符的地方,都可以改写为if-else
反之,不成立。
4. 如果程序既可以使用三元运算符,又可以使用if-else结构,那么优先选择三元运算符。原因:简洁、执行效率高。
*/

        //获取两个整数的较大值
        int m = 12;
        int n = 5;

        int max = (m > n) ? m : n;
        System.out.println(max);//12
        //改写成if-else:
        if (m > n) {
            System.out.println(m);//12
        } else {
            System.out.println(n);
        }
        //必须同时保证表达式A和表达式B都符合左侧数据类型的要求。
        double num = (m > n) ? 2 : 1.0;

        //(m > n)? 2 : "n大";//编译错误,三元运算符的结果必须被使用。

        n = 12;
        String maxStr = (m > n) ? "m大" : ((m == n) ? "m和n相等" : "n大");
        System.out.println(maxStr);//m和n相等

        //获取三个数的最大值
        int n1 = 12;
        int n2 = 30;
        int n3 = -43;

        int max1 = (n1 > n2) ? n1 : n2;
        int max2 = (max1 > n3) ? max1 : n3;
        System.out.println("三个数中的最大值为:" + max2);//三个数中的最大值为:30

        //不建议 嵌套使用,阅读性不好
        //int max3 = (((n1 > n2)? n1 : n2) > n3)? ((n1 > n2)? n1 : n2) : n3;


    }
}

​​​​​​​注意事项:

  • 必须同时保证表达式A和表达式B都符合左侧数据类型的要求。
  • 三元运算符的结果必须被使用。

字符串连接运算符

实际上“+”运算符在 java 语言中有两个作用,作用一是对数字进行求和运算,作用二就是字符串连接运算,那么它在什么时候是进行求和,什么时候又进行字符串连接呢?大家可以这样进行区分,当“+”运算的时候,两边的操作数都是数字的话,一定会进行求和运算,只要其中有一个操作数是字符串类型,那么一定会进行字符串拼接运算,字符串拼接之后的结果还是字符串类型。需要注意的是,当一个表达式当中有多个“+”,并且在没有小括号的前提下,遵循自左向右的顺序依次执行。我们来看一段程序:
public class Demo05Operator {
    /*
        + 运算符:
            1、+ 运算符在java语言中有两个作用。
                作用1:求和
                作用2:字符串拼接
    
            2、什么时候求和?什么时候进行字符串的拼接呢?
                当 + 运算符两边都是数字类型的时候,求和。
                当 + 运算符两边的“任意一边”是字符串类型,那么这个+会进行字符串拼接操作。
    
            3、一定要记住:字符串拼接完之后的结果还是一个字符串。
    */

    public static void main(String[] args) {

        // 定义一个年龄的变量。
        int nianLing = 35;

        // + 在这里会进行字符串的拼接操作。
        System.out.println("年龄=" + nianLing); // "年龄=35"

        int a = 100;
        int b = 200;
        // 这里的 + 两边都是数字,所以加法运算
        int c = a + b;
        System.out.println(c); // 300

        // 注意:当一个表达式当中有多个加号的时候
        // 遵循“自左向右”的顺序依次执行。(除非额外添加了小括号,小括号的优先级高)
        // 第一个+先运算,由于第一个+左右两边都是数字,所以会进行求和。
        // 求和之后结果是300,代码就变成了:System.out.println(300 + "110");
        // 那么这个时候,由于+的右边是字符串"110",所以此时的+会进行字符串拼接。
        System.out.println(a + b + "110"); // 最后一定是一个字符串:"300110"

        // 先执行小括号当中的程序:b + "110",这里的+会进行字符串的拼接,
        // 拼接之后的结果是:"200110",这个结果是一个字符串类型。
        // 代码就变成了:System.out.println(a + "200110");
        // 这个时候的+还是进行字符串的拼接。最终结果是:"100200110"
        System.out.println(a + (b + "110"));

        // 在控制台上输出"100+200=300"
        System.out.println("100+200=300"); // 不是这个意思。

        // 以下有效的运算符加号一共有4个,这4个加号都是字符串拼接操作。
        System.out.println(a + "+" + b + "=" + c);

        // 分析这个结果是多少?
        // 以下表达式中没有小括号,所以遵循自左向右的顺序依次执行。
        // 第1,2,3,4个加号都是进行字符串拼接,拼接之后的结果是:"100+200=100"
        // 前4个加号运行之后是一个字符串"100+200=100"
        // 然后这个字符串再和最后一个b变量进行字符串的拼接:"100+200=100200"
        System.out.println(a + "+" + b + "=" + a + b);

        // 和上面程序不一样的地方是:最后一个加号先执行,并且会先进行求和运算。
        System.out.println(a + "+" + b + "=" + (a + b));

        // 在java语言中怎么定义字符串类型的变量呢?
        // int是整数型 i 是变量名 10是字面量
        //int i = 10;
        // String是字符串类型,并且String类型不属于基本数据类型范畴,属于引用类型。
        // name是变量名,只要是合法的标识符就行。
        // "jack" 是一个字符串型字面量。
        String name = "李四"; // String类型是字符串类型,其中S是大写,不是:string

        // 会进行字符串的拼接
        //System.out.println("登录成功欢迎" + name + "回来");
            
        // 口诀:加一个双引号"",然后双引号之间加两个加号:"++",然后两个加号中间加变量名:"+name+"
        System.out.println("登录成功欢迎" + name + "回来");

        System.out.println(a + "+" + b + "=" + c);

    }
}
    

位运算符​​​​​​​(了解)

位运算是直接对整数的二进制进行的运算

   

 

标签:05,int,System,运算符,println,JavaSE,true,out
来源: https://www.cnblogs.com/wurengen/p/13194838.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有