Java数据类型与运算符(二)

一、基本数据类型的转换

基本数据类型中,布尔值不可以参与基本数据类型转换。

转换方式有两种:自动类型转换和强制类型转换。

(一)自动类型转换

默认自动转换是从小到大的转换

  • byte类型只要参与了运算,会自动转换为int类型
  • short类型只要参与了运算,会自动转换为int类型
  • char类型只要参与了运算,会自动转换为int类型
  • 大类型参与运算,整个结果会变为大类型,大类型不能直接赋值给小类型,需要进行强制类型转换

byte、short、char——int——long——float——double(从小到大)

等号左边的数值类型需要大于右边,才可以自动转换

(二)强制类型转换

二、关系运算符

运算符含义范例结果
==等于5==6false
!=不等于5!=6true
>大于5>6false
<小于5<6true
>=大于等于5>=6false
<=小于等于5<=6true
  1. =是赋值运算符,==是等于运算符
  2. 关系表达式的结果是布尔值
  3. >、<、>=、<=运算符只支持数值类型的数据比较
  4. ==、!=运算符支持所有数据类型的比较
  5. >、<、>=、<=运算符的优先级高于==、!=

(一)代码演示

package com.base.day03;

import java.util.Scanner;

public class Luck {
    public static void main(String[] args) {
        //创建输入对象
        Scanner sc = new Scanner(System.in);
        //从控制台接收数据
        System.out.println("请输入4位会员卡号:");
        int cardNum = sc.nextInt();
        int summation = (cardNum % 10) + (cardNum %100 / 10) + (cardNum % 1000 / 100) + (cardNum / 1000) ;
        System.out.println("会员卡号" + cardNum +"各位之和:" + summation);
        boolean big = summation > 20 ;
        System.out.println("是幸运用户吗?" + big);
    }
}

(二)关于引用型数据类型的比较

  • 比较内容是否相等时候,特别是String,必须要用equals
  • 比较地址是否相等,用==

三、逻辑运算符

逻辑运算必须与关系运算一起使用

运算符含义运算规则
&&短路与

两个操作数都是true,结果才是true;

如果左边是false,右边的表达式不会进行运算

||短路或

两个操作数一个是true,结果为true;

如果左边是true,右边的表达式不会进行运算

!逻辑非

操作数为true,结果是false;

操作数为false,结果为true

&逻辑与

两个操作数都是true,结果才是true;

不论左边取值如何,右边的表达式都会进行运算

|逻辑或

两个操作数一个是true,结果为true;

如果左边为true,右边的表达式都会进行运算

^逻辑异或

两个操作数相同,结果为false;

两个操作数不同,结果为true

代码演示

package com.base.day03;

import java.util.Scanner;

public class LogicalOperator {
    public static void main(String[] args) {
        //王浩的java成绩=100并且音乐成绩大于70 或者 java成绩大于90 并且音乐成绩大于80
        //王浩会获得奖励
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入王浩的java成绩:");
        int javaScore = sc.nextInt();
        System.out.println("请输入王浩的音乐成绩:");
        int musicScore = sc.nextInt();
        boolean flag = ( (javaScore == 100 && musicScore > 70) || (javaScore > 90 && musicScore > 80) );
        //输出王浩是否会得到奖励
        System.out.println(flag);
    }
}

四、位运算符

位运算符的计算,需要先把十进制转换为二进制

示例:按位与,两个操作数都是1,结果才是1

1011101(十进制:93)

1100001(十进制:97)

&

1000001(十进制:65)

93&97=65

运算符含义运算规则

&

按位与两个操作数都是1,结果才是1 
|按位或两个操作数一个是1,结果为1
^按位异或

两个操作数相同,结果为0;

两个操作数不同,结果为1

~按位非

两个操作数都是true,结果才是true;

不论左边取值,右边的表达式都会进行运算

<<左移右侧空位补0
>>右移左侧空位补最高位,即符号位
>>>无符号右移左侧空位补0
  1. 位运算符的操作数都是整型数,包括int、short、long、byte和char
  2. 位运算符的运算结果也都是整型数,包括int、long
  3. 如果操作数是char、byte、short,位运算前其值会自动晋升为int,运算结果也为int
  4. 位运算符对操作数以二进制为单位进行运算
package com.base.day04;

public class BitwiseOperation {
    public static void main(String[] args) {
        //以最有效率的方式计算8的4次方
        System.out.println(8 << 4);
        //以最有效率的方式计算8的一半
        System.out.println(8 >> 1);
    }
}

五、运算符优先级

算数>关系>逻辑>赋值

  • 优先级别最低的是赋值运算符
  • 单目运算符包括!~++--,优先级别高
  • 可以通过()控制表达式的运算顺序,0优先级最高
  • 总体而言,优先顺序为算术运算符>关系运算符 >逻辑运算符
  • 从右向左结合性的只有赋值运算符、三目运算符和单目运算符

六、条件运算符

条件运算符也称之为三目(三元)运算符

代码演示

package com.base.day04;

import java.util.Scanner;

public class DemonstrationOfConditionalOperators {
    public static void main(String[] args) {
        //条件运算符演示
        //猜大小
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入数字:");
        //next后面需要跟首字母大写的变量名
        double num = sc.nextDouble();
        //因为"大"和"小"是字符型,所以变量名需要用String,不用char是因为控制台识别不到char类型
        String big = num > 100 ? "大" : "小";
        System.out.println(big);
    }
}

七、总结

综合案例

package com.base.day04;

import java.util.Scanner;

public class CopyWar {
    public static void main(String[] args) {
        //控制台输入
        Scanner sc = new Scanner(System.in);
        //准备三个骰子
        int a = (int)(Math.random()*6+1);
        int b = (int)(Math.random()*6+1);
        int c = (int)(Math.random()*6+1);
        int summation = a + b + c;
        String result = summation > 10 ? "大" : "小";

        //准备一千万本金
        int myMoney = 1000;
        System.out.println("押大押小,买定离手:");
        String guess = sc.next();
        System.out.println("请输入下注金额:");
        int pay = sc.nextInt();
        System.out.println(a + "," + b + "," + c + "\t\t\t" + summation + "点" + "\t\t\t" + result);
        boolean compare = guess.equals(result);
        myMoney = compare ? myMoney + pay : myMoney - pay;
        String finalResult = compare ? "押中了!" : "押错了!";
        System.out.println(finalResult + "您现在的本金是: " + myMoney);
    }
}
代码详解
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值