java基础03

表达式自动提升类型

 

在程序中出现直接写出来的数字,如果是整数默认类型为int; 如果为小数默认类型为double.

一个表达式中包含多种数据类型时,结果的数据类型会自动提升,规则如下:

  • byte, short, char 自动提升为int

  • 整个表达式的类型提升到最高级的数据类型

        float f1 = 3.14F;  //直接写3.14这样的小数, 默认类型为double
        int i1 = 2147483647; //直接写一个整数的数字, 默认类型为int
​
        byte b1 = 3;
        byte b2 = 2;
        int sum1 = b1 + b2; //b1 和 b2 自动提升类型为int
​
        short s1 = 3;
        short s2 = 2;
        int sum2 = s1 + s2; //s1, s2 自动提升类型为int
​
        char c1 = '1';
        char c2 = '2';
        int sum3 = c1 + c2;  //c1, c2 自动提升类型为int
        System.out.println(sum3);
        
        long l1 = 8;
        //以为表达式中有一个long类型的加数, 所以整个表达式的结果提升为long
        long sum4 = l1 + s1 + b1;
        
        
//        练习:
        short s3 = 5;
//        s3 = s3 - 2; //表达式中的2是int, 表达式的结果为int, 这个语句语法是错误的

字面量(直接量)

在代码中直接出现的数字或者字符串,叫做字面量

//        字面量
        int m = 20; //20称为字面量
        float f5 = 3.14F;  //3.14称为字面量
        String str1 = "字符串"; //字符串 称为字面量

自动装箱和自动拆箱

每一种基本类型都对应一种包装类型(类),基本类型与包装类型之间可以自动转换,

从基本类中转到包装类型称为自动装箱、

从包装类型转到基本类型称为自动拆箱

基本类型包装器类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
        int i = 10;
        Integer integer = i; //基本类型直接赋值给包装类型, 自动装箱
        int i2 = integer; //包装类型直接赋值给基本类型, 自动拆箱
​
​
        //包装类型的常用方法
        String str = "123";
        Integer value = Integer.valueOf(str); //把字符串转换为Integer类型
        System.out.println(1 + value);
        int i1 = Integer.parseInt(str); //把字符串转为int类型
        System.out.println(2 + i1);

Java里的数据类型

 

 

 

运算符

运算符是一种特殊的符号,用于数据计算、赋值和比较。运算符将多个操作数连接在一起,就成为了表达式。

Java运算符包含以下几类:

  • 算术运算符

  • 赋值运算符

  • 比较运算符

  • 逻辑运算符

  • 位运算符

  • 三目运算符

算术运算符

Java里的算术运算符包含:+ - * / % ++ --

  • +运算符除了数学的相加的作用外, 还可以用于字符串的拼接

        int sum1 = 3 + 2;
        String str1 = "加法的和等于:" + sum1; //+用于字符串,自动把后面int类型的数字转为字符串
        System.out.println(str1);
​
        String str2 = sum1 + "这个数是和"; //字符串和其它类型拼接时顺序无关
        System.out.println(str2);
​
        String str3 = "字符串与布尔类型拼接" + true; //字符串可以和所有的基本数据类型拼接
        System.out.println(str3);
  • -做减法运算

  • *做乘法运算

  • /做除法运算

整除的结果也为整数(舍弃小数部分); 整除时不能用0做除数

浮点数相除结果有小数;浮点数相除时可以用0作为除数,结果时Infinity

 ```java
    int res1 = 8 / 4;
    System.out.println("8/4: " + res1);
    res1 = 8 / 3;

// 两个整数相除,得到的结果是整数,舍弃小数部分 System.out.println("8/3: " + res1); // res1 = 8 / 0; // System.out.println("8/0:" + res1); //整除不能用0做除数,会抛出异常

    double res2 = 8 / 2.5; //只要有一个操作数为小数,除出来结果就是小数
    System.out.println("8/2.5: " + res2);
    res2 = 10 / 3.0;
    System.out.println("10/3.0:" + res2); //10/3.0:3.3333333333333335
    res2 = 5.0 / 0;  //浮点数除法,除数可以为零,得到的结果是Infinity(无穷大)
    System.out.println("5.0/0:" + res2); //5.0/0:Infinity
 ```
  • %模运算用于得到除法的余数

整数取模,除数不能为0

小数取模,除数可以为0, 得到的结果是NaN(Not a Number)

//        取模运算
        res1 = 5 % 3; //结果是余数
        System.out.println("5%3: " + res1);
//        res1 = 5 % 0; //模运算也不能用0作为除数
//        System.out.println("5%0:" + res1);
        res2 = 5.1 % 0;
        System.out.println("5.0%3:" + res2);
​
  • ++称为单目运算符(只有一个操作数),自己加1, 可以放在操作数左边或右边、

    --称为弹幕运算符,自己减1,可以放在操作数的左边或右边

        int k = 1;
        /*自加1, ++在后面,操作数先参与运算,然后再加1
          等效于:  res1 = 5 + k;
                   k = k + 1;
        */
        res1 =  5 + k++;
        System.out.println(res1); // 6
        System.out.println(k); //2
        int j = 1;
        /*j自加1, ++在前面,先自加,再参与表达式运算
        *  等效于:   j = j + 1;
        *           res1 = 5 + j;
        * */
        res1 = 5 + ++j;
        System.out.println(res1);//7
        System.out.println(j); //2

赋值运算符

  • = 赋值运算, 把=右边的结果赋给左边的变量。右边的值可以是字面量,表达式,变量,方法调用

       int n = 5; //赋值字面量
        n = 3 + 2; //赋值表达式
        n = k - j; //赋值含有变量的表达式
        Scanner scanner = new Scanner(System.in);
//        n = scanner.nextInt(); //赋值一个方法返回值
        System.out.println(n = 4 + 6);//10, 赋值语句会返回结果
  • 扩展(组合)的赋值运算符

+= -= *= /= %= 有算术运算符和赋值运算符组合而成的

        n = n + 2;
        n += 2; // n = n + 2
        n -= 2; // n = n -2
        n *= 2; // n = n * 2
        n /= 2; // n = n / 2
        n %= 2; // n = n % 2

比较运算符

用于判断两个操作数的大小或是否相等,返回的值是布尔型。包含:

> < == >=(大于或等于) <=(小于或者等于) !=

        System.out.println(3 > 2); //true
        System.out.println(3 < 2); //false
        System.out.println(2 == 2); //true
        System.out.println(2 != 2); //false
        System.out.println(3 >= 3); //true
        System.out.println(3 <= 5); //true
​

逻辑运算符

  • && 短路与

  • & 与

  • || 短路或

  • | 或

  • ! 非

  • ^ 异或

        System.out.println("----------逻辑运算---------");
        //&& 两个操作数都为true, 结果才为true
        System.out.println(true && true);
        System.out.println(true && false);
        n = 1;
        //短路与, 如果根据第一个操作数就能觉得表达式的结果,那么第二个表达式不会再执行
        System.out.println(false && (2 == ++n));//第一个操作数是false, 所以后面的表达式(2 == ++n)不会被执行, n还是1
        System.out.println(n);
​
        System.out.println(true & true);
        System.out.println(false & true);
        int m = 1;
        System.out.println(false & (2 == ++m));
        System.out.println(m);
​
//        || , |  只要有一个为true,就返回true
        System.out.println(true || true);//true
        System.out.println(false || true);//true
        System.out.println(false || false); //false
​
//        求反, true变false; false变true
        System.out.println(!true);
        System.out.println(!false);
        System.out.println(!(2 == 2));// 等效于 2 != 2
​
        //^ 异或, 只有两个操作数不同时返回true, 相同(都true, 都false)返回false
        System.out.println(true ^ false);//true
        System.out.println(false ^ false);//false
        System.out.println(true ^ true);//false
​

位运算符

  • & 按位与

  • | 按位或

  • ~ 按位非

  • ^ 按位异或

  • << 向左移位

  • > > 向右移位

  • >>> 无符号右移

        System.out.println("---------位运算符------------");
        int a = 5; // 101
        int b = 7; // 111
        System.out.println(a & b); //5, 101
​
        System.out.println(a | b); //7, 111
​
        a = -5;
        System.out.println(~a);// 4
​
        a = 5;
        System.out.println(a ^ b);//2, 010
​
        /*
        * 面试题:请用性能最优的方法计算: 2 * 8
        * */
        a = 2;
        System.out.println(a << 3);//16,  二进制10 左移3位  得到二进制 10000
​
        System.out.println(5 >> 2);
​
        System.out.println(-5 >>> 2);

三目运算符

三目运算符用于两分支的判断,等效于if else语句

语法: 条件表达式 ?为真值 :为假的值

       res1 = 3 > 5 ? 100 : 0;
        System.out.println(res1);
​

  • 练习: 从控制台输入两个整数, 打印出较大的数

        Scanner scanner = new Scanner(System.in);
        System.out.println("输入一个整数:");
        int i = scanner.nextInt();
        System.out.println("输入一个整数:");
        int m = scanner.nextInt();
//        如果i大于m, 返回i; 如果i小于m, 返回m
        int res1 = i > m ? i : m;
        System.out.println(res1);

运算符的优先级

 

括号 > 单目运算符 > 算术运算 > 比较运算符 > 逻辑运算符 > 三目 > 赋值

 

 

        /*
        * 第一步,计算括号: 5 * ++a == 8 ? true : false
        * 第二步,计算++: 5 * 6 == 8 ? true : false
        * 第三步,计算* : 30 == 8 ? true : false
        * 结果:false
        * */
        a = 5;
        System.out.println((3 + 2) * ++a == 8 ? true : false);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值