类型转换与运算符

类型转换

无论是基本数据类型还是引用类型,都可能出现从一种类型转换为另外一种类型。

自动类型转换

大类型 = 小类型  自动转换;
  • 在进行四则运算的过程中,编译器会自动进行类型转换(自动类型转换)。boolean类型是不可以和其他类型做类型转换的。

  • 转换的规则:

                      char
                       ↓
    byte -->  short --> int --> long --> float --> double

强制类型转换

小类型 = (小类型)大类型
  • 执行强转动作的时候,可能会发生数据精度问题,所以强制的时候一定要注意。

  • 如果真的要强转,你要保证类型转换之后,数据不会出现问题。

运算符

在Java中提供了一些可以帮助我们做逻辑处理、数值运算的符号。这些符号统称为运算符。Java中的运算符一共有7种。

运算符概念

赋值运算符

赋值运算符是整个语言中唯一的一个自右向左进行运算的。

赋值运算符是整个语言中优先级别最低的。

int num = 19; // = 就是赋值运算符

算数运算符

算数运算符中包含:+ 、 - 、 * 、 / 、% 、 ++ 、 --

  • 注意事项

    • + 加号左右链接符号,自己一定要注意拼接字符串产生的问题

    • ++--

      • 如果是单独一条语句 无所谓前后问题 都是自增、自减1

      • 如果不是单独一条语句

        • 前加 、前减 : 先自增、先自减 然后运算

        • 后加、后减 : 先运算 然后在自增、自减

关系运算符

> < >= <= == != instanceof

  • 注意事项

    • 关系运算符最后的结果是一个boolean类型的值

    • > < >= <= 只能比较基本数据类型中除了boolean 以外的类型

    • == != 所有的类型都可以比较

    • instanceof 只能比较引用类型 判定某个值是否属于某个具体的类型

逻辑运算符

& | && || ^ !

// 测试学习逻辑运算符
public class LogicOperator{
    public static void main(String[] args) {
        
        //1:逻辑运算符最后的结果是一个boolean值 逻辑运算左右两边的操作数一定也是个boolean值
​
        System.out.println("======测试逻辑& 运算符=======");
        System.out.println(true&true);
        System.out.println(true&false);
        System.out.println(false&true);
        System.out.println(false&false);
        
        System.out.println("======测试逻辑&& 短路与  运算符=======");
        System.out.println(true&&true);
        System.out.println(true&&false);
        System.out.println(false&&true);
        System.out.println(false&&false);
​
        System.out.println("======测试逻辑| 运算符=======");
        System.out.println(true|true);
        System.out.println(true|false);
        System.out.println(false|true);
        System.out.println(false|false);
    
        System.out.println("======测试逻辑|| 短路或  运算符=======");
        System.out.println(true||true);
        System.out.println(true||false);
        System.out.println(false||true);
        System.out.println(false||false);
        System.out.println("======测试逻辑!  运算符=======");
        System.out.println(!true);
        System.out.println(!false);
        System.out.println("======测试逻辑^ 异或  运算符=======");
        System.out.println(true^true);
        System.out.println(true^false);
        System.out.println(false^true);
        System.out.println(false^false);
    }
}
  • 注意事项

    • & | ^ 在后面的开发中是不会使用的

    • &和&& 的区别? |和||的区别?

      • &&而言第一个操作数如果是false,第二个操作数不运算,直接出结果false,但是&会将两个操作数都进行运算;

      • ||而言第一个操作数如果是true,第二个操作数不运算,直接出结果true,但是|会将两个操作数都进行运算;

扩展运算

扩展运算符是 算数运算符+赋值运算符 或者是 位运算符+赋值运算 的结合体。

+= -= *= /= %= >>= <<= &= |=

// 测试学习扩展运算符
public class ExtendsOperator{
    public static void main(String[] args) {
        // 编写如下代码
        int sum = 0;
        int n = 10;
​
        // 让sum中存储 sum+n的和
        sum = sum + n; // sum += n; => sum =  sum * n;
        System.out.println("累加的和是:"+sum);
        // 好玩的
        byte b = 0;
        int s = 10;
        //b = (byte)(b+s);
        b += s;//=> b = b+s; 
        System.out.println(b);
    }
}

注意事项:

  • 扩展运算符的优势:提升编译速度、开发速度、自动进行强制类型转换

  • 扩展运算符的缺点:不利于阅读

条件运算符

也叫三目运算符,是java中唯一的一个三目运算符。

表达式1?表达式2:表达式3;

表达式1的值是一个boolean值 其余表达2和表达式3的类型尽量保证统一,防止后期报错。

位运算符

位运算符就是用来提升算数的运算效率的,因为它可以直接基于二进制进行运算。

// 测试学习位运算符
public class BitOperator{
    public static void main(String[] args) {
        
        // 按位&
        /*
            100
            101
          ------
            100 --> 4
        */
        System.out.println(4&5);
​
​
        // 按位|
        /*
            100
            101
          ------
            101 --> 5
        */
        System.out.println(4|5);
​
​
        // 按位^
        /*
            100
            101
          ------
            001 --> 1
        */
        System.out.println(4^5);
​
​
        // 按位~ 符号位也要取反
        /*
            0 0 100
          ------
            1 1 001 
        */
        System.out.println(~4);
​
​
        // 按位右移>>  M>>N = M/2^N 
        /*
            32 0 0 100000
         右移4位 --> 将右侧的4个二进制数字干掉 0 0 10 
         补位4位 --> 往左侧补     0000 0 010  =>2
​
​
            -32 1 0 100000 --> 1 1 011111 --> 1 1 100000
​
            右移4位 --> 将右侧的4个二进制数字干掉  1 1 10
            补位4位 --> 往左侧补    1111  1 1 10 
​
            通过符号位填充的
        */
        System.out.println(32>>4);
​
        System.out.println(-32>>4);
​
        // 按位左移<<  M<<N = M*2^N
        System.out.println(2<<4);
        System.out.println(-2<<4);
​
​
        // 无符号右移>>>  M>>>N  
        System.out.println(32>>>4);
​
        System.out.println(-32>>>4);
​
    }
}

运算符优先级问题

不要试图通过运算符的优先级别去确定表达式的运算顺序。

  • 如果你没有办法确定会先运算哪一个,那就加() 解决所有问题

(num>>1) == num
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值