JavaSE-02【类型转换和运算符】

JavaSE-02【类型转换和运算符】

第一章:数据类型转换

Java程序中要求参与计算的数据,必须要保证数据类型的一致,
如果数据类型不一致则发生类型的转换

1.1 自动转换

  • 自动转换:将取值范围小的类型自动提升为取回范围大的类型
自动类型转换原理:

一个int变量和一个byte变量进行加法运算,结果会是什么数据类型?
运算结果:变量的类型将是int类型,这就出现了数据类型的转换
如下代码:

在这里插入图片描述

  • 案例:Demo01_DataType
/**
 * 当数据类型不一致时,将会发生数据类型转换
 *  自动类型转换:隐式
 *      1、代码不需要进行特殊处理,自动完成
 *      2、数据范围从小到大
 *  强制类型转换:显示
 *
 */
public class Demo01_DataType {
    public static void main(String[] args) {
        System.out.println(1000);   //输出一个整数,默认是int类型
        System.out.println(3.14);   //输出一个小数,默认是double类型


        //int--->long
        /*
            左边是:long类型,右边默认是int类型,左右不一样
            一个等号代表赋值,将右边的int常量100,交给左边long类型的变量进行存储
            int ---> long:符合数据范围从小到大的要求
            这一行代码发生了数据类型转换:由int转向long
         */
        //long num1 =100L;
        //System.out.println(num1);
        long num2 =100;
        System.out.println(num2);//100

        //float--->double
        /*
            左边是double类型,右边是float类型,左右不一样
            float---> double,符合从小到大的规则
            也发生了自动类型转换
         */
        double num3 = 3.3F;
        System.out.println(num3);//

        //long-->float
        /*
            左边是float类型,右边是long类型,左右不一样
            long-->float,范围是float更大些,符合从小打到的规则
            发生了自动类型转换
         */
        float num4 = 60L;
        System.out.println(num4);//60.0
    }
}

1.2 强制转换

  • 强制类型转换:将取值范围大的类型,强制转换成取值范围小的类型
强制类型转换原理:
	将1.55赋值给int类型的变量会发生什么?出现编译失败,无法赋值
	即:int a = 1.55;//编译失败

	double类型内存为8字节,int类型内存为4字节,
	1.55是double类型,取值范围大于int。

	可以理解为double是8L的水壶,int是4L的水壶,
	不能把大水壶中的水直接放在小水壶中去,

	想要赋值成功,只有通过强制类型转换,
	将double类型强制转换成int类型才能赋值,
  • 转换格式:
数据类型 变量名称 = (数据类型) 被转数据值;
  • 案例:
/**
 * 强制类型转换:
 *      特点:代码需要进行特殊格式的处理,不能自动完成
 *      格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;
 *
 *  注意事项:
 *      1、强制类型转换一般不推荐使用,因为有可能发生精度丢失、数据溢出
 *      2、byte/short/char这三种类型都可以发生数学运算,例如加法"+"
 *      3、byte/short/char这三种类型在运算的时候,都会被首先提升为int类型,然后再计算
 *      4、boolean类型不能发生数据类型转换
 */
public class Demo02_DataType {
    public static void main(String[] args) {
        //long--->int
        //左边是int类型,右边是long类型,不一样
        //不能发生自动类型转换:int num1 = 100L;
        //格式:范围小的类型 范围小的类型名 = (范围小的类型) 原本范围大的数据
        int num1 = (int)300000000L;
        System.out.println(num1);//300000000

        //double--->int 强制类型转换
        int num2 = (int) 3.88;
        System.out.println(num2);//3 注意:不是四舍五入,而是所有的小数都会被舍弃掉

        //char和int运算
        char c1 = 'a';//字符型变量c1,存放字符a
        System.out.println(c1+1);//98 小写字母a被当做97进行运算,
        //计算机的底层会使用二进制数字表示一个字符
        //一旦char类型参与运算,那么字符就会按照一定的规则翻译成一个数字

        //byte与byte执行加法运算,byte会先自动转化成int,再进行运算操作
        byte num3 = 60;//注意右侧的数据不能超过左侧数据类型的取值范围
        byte num4 = 30;
        //byte num5 = num3+num4;//编译会报错
        // byte+byte ---> int+int=int
        int num6 = num3+num4;
        System.out.println(num6);

        //short与byte的相加运算,byte和short都会转换成int类型之后,再参与运算
        short num8 = 40;
        byte num9 = 30;
        int num10 = num8+num9;
        short num11 = (short) (num8+num9);//num8+num9 先默认执行自动转型成int。然后再强制转换成short
    }
}
  • 注意事项
1、强制类型转换一般不推荐使用,因为有可能发生精度丢失、数据溢出
2、byte/short/char这三种类型都可以发生数学运算,例如加法"+"
3、byte/short/char这三种类型在运算时,都会被提升为int类型再计算
4、boolean类型不能发生数据类型转换

1.3 基本数据类型之间的关系图

在这里插入图片描述

第二章:运算符

2.1 算术运算符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jMWQq7GS-1686187670125)(photo/JavaSE02_类型转换和控制符.assest/1663735067673.png)]

  • 1、算术运算符----四则与取模运算
四则运算:加 减 乘 除
运算步骤:首先计算得到表达式的结果,然后再打印输出这个结果
除法运算:除法运算使用的是整除,
		 整数除以整数,结果仍然是整数,只看商值,不看余数
取模运算:即求余数。使用符号%。(取模只对于整数运算存在意义)
注意事项:运算中出现不同类型的数据,结果将是数据类型范围大的
public class Demo04_Operator {
    public static void main(String[] args) {
        //两个常量之间进行数学运算
        System.out.println(20+29);//49

        //两个变量之间进行数学运算
        int a = 22;
        int b = 33;
        System.out.println(a+b);//55

        //变量和常量之间混合进行数学运算
        int c = 50;
        System.out.println(c+50);//100

        //整数除法运算
        int d = 31;
        int e = 2;
        int result1 = d/e;
        System.out.println(result1);//商值:15

        //取模运算
        int result2 = d%e;
        System.out.println(result2);//余数:1

        //不同类型运算,结果会是数据类型大的那种
        double result3 = d+2.5;
        System.out.println(result3);//33.5
    }
}
  • 2、算术运算符----加号的多种用法
  1、对于数值来说,+号就是加法
  2、对于字符char类型:
  		在计算之前,char会被提升为int,然后再进行计算  
        char类型字符和int类型数字之间的关系表:ASCII和Unicode
  3、对于字符串来说,加号代表字符串连接操作,
  		任何数据与字符串连接,结果都会变成字符串
  4、优先级:括号的优先级最高,先运算括号中的内容
  • 3、案例
public class Demo05_Operator {
    public static void main(String[] args) {
        //字符串类型的变量使用格式
        //格式:字符串类型 字符串变量 = 数据值;
        String str1 = "qiaodan";
        System.out.println(str1);//qiaodan

        //字符串相加。即字符的连接
        System.out.println("Hello"+"World");//HelloWorld

        //String + int = String
        String str2 = "hello";
        int num1 = 22;
        System.out.println(str2+num1);//hello22

        //优先级:括号的优先级大于其他
        String str3 = "James";
        System.out.println(str3+10+10);//James1010
        System.out.println(str3+(10+20));//James30
    }
}
  • 3、算术运算符----自增自减运算
1、自增符号:++
2、自减符号:--
3、基本含义:让一个变量增长一个数字1,让一个变量减少一个数字1 
4、使用格式:写在变量之前,或写在变量之后;++a,a++,b--.--b
5、使用方式:  
   1)、单独使用:不和其他任何操作混合,自己独立成为一个步骤 
   2)、混合使用:和其他操作混合
6、使用区别: 
   1)、在单独使用的时候,前++和后++没有什么区别,
   	   也就是 ++a,a++是一样的 
   2)、在混合使用的时候,区别如下:    
       区别1:如果++在前,变量会立刻加1.拿着结果进行运算。
       		 【先自增后运算】 
       区别2:如果++在后,变量首先使用本值参与运算,然后变量再加1。
             【先运算后自增】
7、注意事项:只有变量才能自增,自减运算符,常量不可以
public class Demo06_Operator {
    public static void main(String[] args) {
        //单独使用
        int num1 = 100;
        System.out.println(num1);//100
        ++num1;// ++在前
        System.out.println(num1);//101
        num1++;// ++在后
        System.out.println(num1);//102

        System.out.println("-----------------------------");

        //混合使用 ++在前
        int num2 = 200;
        //变量先+1,然后打印结果
        System.out.println(++num2);//201
        System.out.println(num2);//201

        System.out.println("-----------------------------");

        //混合使用 ++在后
        int num3 = 300;
        //变量选运算,//运算结束后在+1
        System.out.println(num3++);//300
        System.out.println(num3);//301

        System.out.println("-----------------------------");

        //混合运算--和赋值相结合1
        int num4 = 40;
        //前--。变量立刻-1.编程39.再赋值给result1
        int result1 = --num4;
        System.out.println(result1);//39
        System.out.println(num4);//39

        System.out.println("-----------------------------");

        //混合运算--和赋值相结合2
        int num5 = 50;
        //后--,变量先把原来的值50赋值给result2.然后-1,变成49
        int result2 = num5--;
        System.out.println(result2);//50
        System.out.println(num5);//49

        System.out.println("-----------------------------");

        //++ . --混合
        int x = 22;
        int y = 33;
        int result3 = x++ + --y;
        System.out.println(result3);//54
        System.out.println(x);//23
        System.out.println(y);//32
    }
}

2.2 赋值运算符

  • 赋值运算符
概念:就是将符号右边的值,赋值给符号左边的变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J2zQg3Gx-1686187670127)(photo/JavaSE02_类型转换和控制符.assest/1663754545867.png)]

 赋值运算符:
   基本赋值运算符:单个“=”,代表将右侧的数据交给左侧的变量保存。如:int a = 10;
   复合赋值运算符:
       +=  a+=1    等价于     a=a+1
       -=  b-=2    等价于     b=b-2
       *=  c*=3    等价于     c=c*3
       /=  d/=4    等价于     d=d/4
       %=  e%=5    等价于     e=e%5
  注意事项:
   	1、只有变量才能使用赋值运算符,常量不能进行赋值
   	2、复合运算符其中隐含了一个强制类型转换
    public static void main(String[] args) {
        int a = 5;
        a+=5;//即:a=a+5,也就是变量a先加5,再赋值给变量a
        System.out.println(a);//输出结果是10
    }
  • 练习 Demo07_Operator
/**
 * 赋值运算符:
 *  基本赋值运算符:单个“=”,代表将右侧的数据交给左侧的变量保存。如:int a = 10;
 *  复合赋值运算符:
 *      +=  a+=1    等价于     a=a+1
 *      -=  b-=2    等价于     b=b-2
 *      *=  c*=3    等价于     c=c*3
 *      /=  d/=4    等价于     d=d/4
 *      %=  e%=5    等价于     e=e%5
 * 注意事项:
 *  1、只有变量才能使用赋值运算符,常量不能进行赋值
 *  2、符合运算符其中隐含了一个强制类型转换
 */

public class Demo07_Operator {
    public static void main(String[] args) {
        // +=练习
        int a = 10;
        a+=5;//a = a + 5  a=15
        System.out.println(a);//15

        // -= *= /+同上

        //%=练习
        int b = 11;
        b%=3;//b = b % 3  b=2
        System.out.println(b);//2

        //隐含强制类型转换
        byte c = 5;
        //byte c = c + 5
        //byte c = byte + int
        //byte c = int + int
        //byte c = int
        //byte c = (byte) int
        c+=5;
        System.out.println(c);//10
    }
}

2.3 比较运算符

  • 比较运算符
概念:两个数据之间进行比较的运算,运算结果都是布尔值,
     即true或者false

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b8u8diND-1686187670128)(photo/JavaSE02_类型转换和控制符.assest/1663764821303.png)]

  • 注意事项
  1、两个等号== 表示比较符号两边数据是否相等,单个 = 表示复制
  2、比较运算符的结果一定是boolean值,成立是true,否则是false     
  3、如果进行多次判断不能连着写
  • 练习 Demo08_Operator

    public class Demo08_Operator {
        public static void main(String[] args) {
            //常量比较
            System.out.println(10 > 5);//true
            System.out.println(5.5 < 1.5);//false
    
            //变量比较
            int num1 = 10;
            int num2 = 20;
            System.out.println(num1 > num2);//false
    
            //混合使用
            System.out.println(num1 >= 10);//true
            System.out.println(num1 <= 10);//true
            System.out.println(num2 == 20);//true
            System.out.println(num2 != 30);//true
    
            //多次判断不能连着写
            int num3 = 30;
            //System.out.println(20<num3<40);//编译错误
        }
    }
    

2.4 逻辑运算符

&&全部是true,才是true,否则是false
||至少一个是true,就是true,全部是false,才是false
本来是true,变成false。本来是false,变成true
逻辑运算符:
   与 (并且) &&  全为true,才是true。否则为false
   或 (或者) || 至少一个为true,即为true。全false。才false
   反  (取反) !  原本是true,取反为false,原本是false,取反为true
 
   注意事项:
       &&且 、||或,具有短路效果,
       即:如果左边可以判断得到最终结果,
       	   那么右边的代码将不再执行,从而提高性能
  • 练习 Demo09_Operator
public class Demo09_Operator {
    public static void main(String[] args) {
        //&&且
        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);//true
        System.out.println(false || false);//false

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

        //短路效果
        int a = 10;
        System.out.println(1 > 2 && ++a < 100);//false
        System.out.println(a);//10

        int b = 20;
        System.out.println(1 < 2 || ++b < 100);//true
        System.out.println(b);//20
    }
}

2.5 三元运算符

   一元运算符:只需要一个数据就可以操作的运算符。如:自增 自减
   二元运算符:需要两个数据才能操作的运算符。如:加法
   三元运算符:需要三个数据才能操作的运算符。
 
   三元运算符:
       格式:数据类型 变量名称 = 条件判断 ? 表达式A : 表达式B
       流程:首先判断条件是否成立:二选一
               条件成立为true,取表达式A的值赋值给左侧变量
               条件不成立为false。取表达式B的值赋值给左侧变量
 
   注意事项:
       1、必须同时保证表达式A和表达式B都符合左侧数据类型的要求
       2、三元运算符的结果必须被使用

练习 Demo10_Operator

public class Demo10_Operator {
    public static void main(String[] args) {
        int a = 30;
        int b = 40;
        //如果a>b为true。则将表达式a赋值给变量c。并输出
        int c = a > b ? a : b;
        System.out.println(c);//40

        //简化写法
        System.out.println(a < b ? a : b);//30
    }
}

2.6 运算符注意事项

  • byte、short、char的使用注意事项
1、对于byte、short、char三种类型来说,
   如果右侧赋值的数值没有超过范围,
   那么javac编译器将会自动隐含的为我们补上一个(byte)(short)(char)

2、如果右侧超过了范围,那么编译器就会报错

3、编译器的常量优化
   如果右侧的表达式中都是常量,没有任何变量参与运算
​   short result = 2+3; //等号右边全部是常量,没有任何变量参与运算
​   在代码编译之后等到的.class文件的结果是:
		short result = 5;(注意此时代码还没有运行)
​   这被称为是“编译器的常量优化”
   但是一旦表达式中出现变量参与运算,就不存在此种优化 
  • 案例 Demo12_Notice
public class Demo12_Notice {
    public static void main(String[] args) {
        //1、右侧数据值没有超过左侧的范围
        //等号右侧确实是int类型,但是数据值没有超过左侧的范围,就是正确的
        //右侧的数据值不是int--转byte。不是自动类型转换
        byte num1 = /*(byte)*/33;//右侧数据值没有超过左侧的范围,编译器会自动隐含的补充一个(byte)
        System.out.println(num1);//33

        //2、右侧数据值超过了左侧的范围
        // byte num2 = 130;//编译报错

        //3、char
        // 右侧的数据值不是int--转char。不是自动类型转换,没有超出范围
        //编译器将会自动补充上一个隐含的(char)
        char c1 = /*(char)*/97;
        System.out.println(c1);//a

        //4、short
        short a = 1;
        short b = 2;
        short result1 = (short) (a+b);//变量相加,short会自动转为int,进行运算。左侧需要是int,或者强转
        short result2 = 1+2;// 数值相加,在编译期间就已计算完毕,即short result2 = 3;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值