Java学习第二天

本文详细介绍了Java编程中的数据类型提升规则,包括整型、浮点型、字符型的自动提升,并展示了字面量、自动装箱与拆箱的概念。此外,还讲解了算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符及三目运算符的使用。接着,讨论了条件判断语句,如单分支、两分支、多分支判断以及switch语句的实现。这些内容对于理解Java的基础语法至关重要。
摘要由CSDN通过智能技术生成

表达式自动提升类型

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

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

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

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

            byte b1 = 3;
            byte b2 = 2;
            int sum1 = b1 + b2;//b1和b2自动提升类型为int
    ​
            short s1 = 1;
            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);//char相加是加的ASCII码值
    ​
            long l1 = 8;
            //表达式中有一个long类型的加数,所以整个表达式的结果提升为long
            long sum4 = l1 + s1 + b1;
    ​
            //练习:
            short s3 = 5;
            s3 = s3 - 2;//2是int类型,所以表达式结果为int类型

    字面量(直接量)

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

​
        int m =28;//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);//结果是124
        int i1 = Integer.parseInt(str);//把字符串转为int类型
        System.out.println(2 + i1);//结果125

Java里的数据类型

运算符

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

Java运算符包含以下几类:

  • 算术运算符

  • 赋值运算符

  • 比较运算符

  • 逻辑运算符

  • 位运算符

  • 三目运算符

算术运算符

java里的算术运算符包含: + - * / %(取余) ++ --

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

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

  • *做乘法运算

  • / 做除法运算

    整除的结果为整数,会舍弃小数部分;整除时不能用0做除数

    浮点数相除结果有小数,可以用0做除数,结果是Infinity

            int res1 = 8/4;
            System.out.println("8/4=" + res1);
            res1 =8/3;
            //两个整数相除,结果会舍弃小数部分
            System.out.println("8/3=" + res1);
    //        res1 = 8/0;//整数除法不能用0做除数,会抛出异常
            //java代码运行时出现异常会停在异常处,异常之后的不会在运行
            System.out.println("8/0="+ res1);
            double res2 = 8/2.5;//只要有一个操作数为小数,除出来的结果就是小数
            System.out.println("8/2.5=" + res2);
            res2 = 10/3.0;//结果为3.3333333333333335
            System.out.println("10/3.0=" + res2);
            res2 = 5.0/0;//浮点数除法,除数为0,结果为Infinity无限大
            System.out.println("5.0/0=" + res2);
  • %模运算用于得到除法的余数

    整数取模,除数不能为0;

    小数取模时,除数可以为0,结果为NaN

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

            int k = 1;
            k++;//k加1, 操作数先参与运算再加1
            ++k;//k加1, 先自我加1再参与运算
            System.out.println(k);
  • --称为单目运算符(只有一个操作数),自己加1,可以放在操作数的左边或右边

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

    注:运算方式同++

赋值运算符

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

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

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

            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

    比较运算符

    用于判断两个操作数的大小是否相等,返回的值是boolean值包含:

    < > == <= >= != >=:大于或等于

            //比较运算符
            System.out.println(3 > 2);//返回true
            System.out.println(3 < 2);//返回false
            System.out.println(2 == 2);//返回true
            System.out.println(2 != 2);//返回false
            //同理:>=  <=

逻辑运算符

  • && 短路与 有一个false是返回false

  • & 与

  • || 短路或 同时为false时返回false

  • | 或

  • ! 非

  • ^ 异或 操作数相同返回false,不同返回true

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

位运算符

  • & 按位与

  • | 按位或

  • ~ 按位非

  • ^ 按位异或

  • << 向左移位

  • > > 向右移位

  • > >> 无移位右移

            //位运算符
            int a = 5;
            int b = 7;
            //转换为二进制右对齐再进行计算
            System.out.println("a&b:  "+ (a & b));//结果为5
            System.out.println("a|b:  "+ (a | b));//结果为7
            a = -5;
            System.out.println(~a);//2,010,结果为4,  有符号位
    ​
            a = 5;
            System.out.println(a ^ b);//结果为2
    ​
            //面试题:最优解计算:2 * 8
            a = 2;//2左移三位
            System.out.println(a << 3);//结果为16,10左移三位得10000,换成十进制为16
    ​
            System.out.println(5 >> 2);//5右移两位得1,考虑符号位
    ​
            System.out.println(5 >>> 2);

三目运算符

三目运算符用于两粉质的判断,等效与if else语句

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

        //从控制台输入两个整数,打印较大的那个值
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入一个整数:");
        int i = scanner.nextInt();
        System.out.println("输入一个整数:");
        int m = scanner.nextInt();
        res1 = i > m ? i : m; //i>m,返回i;i<m,返回m
        System.out.println(res1);

运算符的优先级

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

条件判断语句

单分支条件判断

if( 条件表达式){

//条件为真时执行的语句

}

        int rain = 1;//是否下雨,1就是下雨,0没有下雨
        if(rain == 1){  //if()括号里面的是判断语句,语句为真就执行{}中的内容;为假不执行
            System.out.println("下雨了出门带雨伞");
        }

两分支判断

if(条件表达式){

//为真执行

}

else{

//为假执行

}

        //性别:1--男,2--女
        int sex = 1;
        if(sex == 1){
            System.out.println("男");
        }else{
            System.out.println("女");
        }

多分支判断

if(条件){

#分支一

}else if(条件){

#分支二

}else{

#分支三

}

 //输入一个人金额,小于等于800,买一个老年机,小于等于1500,小米;<=2500,vivo;<=5000,华为;>5000,土豪
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入金额:");
        int money = scanner.nextInt();
        if(money > 5000){
            System.out.println("你是土豪");
        }else if(2500 < money && money <= 5000){
            System.out.println("买华为");
        }else if(1500<money && money <= 2500){
            System.out.println("买vivo");
        }else if(800 < money && money <= 1500){
            System.out.println("买小米");
        }else if(money <= 800){
            System.out.println("买老年机");
        }
//模拟取款机功能
        System.out.println("1. 查询   " + "2. 取款   " + "3. 转账   " + "4.修改密码   ");
        System.out.println("请输入数字选择功能:");
        int i = scanner.nextInt();
        if(i == 1){
            System.out.println("查询账户");
        }else if(i == 2){
            System.out.println("取款");
        }else if(i == 3){
            System.out.println("转账");
        }else if(i == 4){
            System.out.println("修改密码");
        }else {
            System.out.println("无效输入:请重输");
        }

switch(开关语句)实现多分支判断

switch(条件表达式){

case 值1:

//分支一

break:

case 值2:

//分支二

bresk:

default:

//其他情况的分支

break:

}

         System.out.println("1. 查询   " + "2. 取款   " + "3. 转账   " + "4.修改密码   ");
        System.out.println("请输入数字选择功能:");
        int i = scanner.nextInt();
        switch (i){
            case 1:
                System.out.println("查询");
                break;
            case 2:
                System.out.println("取款");
                break;
            case 3:
                System.out.println("转账");
                break;
            case 4:
                System.out.println("修改密码");
                break;
            default:{
                System.out.println("无效输入");
                break;
            }
        }

注:

  1. case语句只能是具体的值(类型可以是byte、char、short、int、String、枚举),不能是表达式或变量;

  2. 每个case结束都要有break(终止执行后面的),如果没有break,满足case条件后面的case都会执行(不再做判断),直道遇到break

  3. default执行其他情况(所有case都不满足),不受语句位置影响

System.out.println("*****学生管理系统*****");
System.out.println("新增学生");
System.out.println("修改学生");
System.out.println("删除学生");
System.out.println("查询学生");
System.out.println("********************");
System.out.println("请输入功能:");
String i = scanner.next();
switch (i){
    case "新增学生":
        System.out.println("新增学生");
        break;
    case "修改学生":
        System.out.println("修改学生");
        break;
    case "删除学生":
        System.out.println("删除学生");
        break;
    case "查询学生":
        System.out.println("查询学生");
        break;
    default:{
        System.out.println("无效输入");
        break;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值