02 数据类型转换、运算符、方法入门

Java基础语法之数据类型转换、运算符、方法入门

一、数据类型转换

1. 自动转换(隐式)
  • 将取值范围小的类型自动提升为取值范围大的类型。

  • 特点:代码不需要进行特殊处理,自动完成

  • 规则:数据范围从小到大, byte、short、char —> int —> long —> float —> double

    public class Demo01DataType{
      public static void main(String[] args){
        
        byte a = 20;
        //符合将范围小的类型赋值给范围大的类型
        short b = a;
        System.out.println(b);  //20
    
        //错误:将short-->byte
        //a = b;
    
        //错误:将long-->int
        //int c = 100L;
    
        //将默认int-->long
        long d = 100;
        System.out.println(d); //100
      }
    }
    
    
2. 强制转换(显式)
  • 将取值范围大的类型强制转换成取值范围大的类型。

  • 转换格式数据类型 变量名 =(数据类型)被转数据值

  • 注意

    • 浮点数转成整数,直接取消小数点,可能造成精度损失
    • int 强制转成 short 砍掉2个字节,可能造成数据丢失。
3. 注意事项
  • 强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。

  • boolean类型不发生数据类型转换。

  • byte、short、char这三种类型都可以发生数学运算。

  • byte、short、char这三种类型在运算的时候,都首先会提升为int类型,然后再计算。

    byte a = 40;
    byte b = 50;
    //正确:byte + byte ——> int + int ——> int
    int result1 = a + b;
    System.out.println(result1); // 90
    
    byte c = 40;
    byte d = 50; 
    //错误:byte + byte ——> int + int ——> int  
    byte result2 = c + d;
    System.out.println(result2);
    
4. ASCII编码表

二、运算符

1. 算术运算符

  • 两个常量之间可以进行数学运算

    System.out.println(1 + 2)
    
  • 两个变量之间可以进行数学运算

    int a = 10;
    int b = 10;
    System.out.println(a + b)
    
  • 常量与变量之间可以进行数学运算

    int a = 10;
    System.out.println(a + 10);
    
  • 对于整数的表达式,除法用的是整除,整数除以整数,结果仍然是整数。

    int a = 10;
    System.out.println(a / 3); //3
    System.out.println(a % 3); //1
    
  • 一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种。

    int a = 10;
    // int + double ——> double + double ——> double 
    double result = a + 0.5;
    System.out.println(result); //10.5
    
  • 四则运算当中的加号 + 有常见的三种用法:

  • 对于数值来说,就是加法;

  • 对于字符char类型来说,在计算之前,char会被提升为int,然后再计算;

  • 对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作。任何数据类型
    和字符串进行连接时,结果都会变成字符串。

    String str1 = "Hello";
    System.out.println(str1); // Hello
    System.out.println("Hello" + "World"); // HelloWorld
    String str2 = "java";
    System.out.println(str2 + 20); //java20
    System.out.println(str2 + 20 +30); //java2030
    System.out.println(str2 + (20 + 30)); //java50
    
  • 自增\自减运算符

    • 只有变量才可以使用自增自减运算符,常量不可以。

    • 单独使用:不和其他任何操作混合,自己独立成为一个步骤。在单独使用的时候,前 ++和后 ++ 没有任何区别。

    • 混合使用:和其他操作混合。在混合使用时有重大区别

      • 如果是前++,那么变量立即+1,然后使用+1后的结果。先加后用

      • 如果是后++,那么首先使用变量本来的数值,然后再让变量+1。先用后加

        int num1 = 20;
        System.out.println(++num1); // 21
        System.out.println(num1);  //21
        
        int num2 = 20;
        System.out.println(num2++); //20
        System.out.println(num2); //21
        
        int num3 = 20;
        int result1 = --num3;
        System.out.println(result1); // 19
        System.out.println(num3); // 19
        
        int num4 = 20;
        int result2 = num4--;
        System.out.println(result2); // 20
        System.out.println(num4); // 19
        
        int x = 10;
        int y = 20;
        int result3 = ++x + y--;
        System.out.println(result3); //31
        System.out.println(x); //11
        System.out.println(y); //19
        
2. 赋值运算符

  • 复合赋值运算符其中隐含了一个强制类型转换

    byte num = 30;
    //num = num + 5;
    //num = byte + int
    //num = int + int
    //num = int 
    //num = (byte)int
    num += 5;
    System.out.println(num); //35
    
3. 比较运算符

  • 如果进行多次判断,不能连着写。
4. 逻辑运算符

  • 逻辑运算符只能用于boolean值;
  • 与、或需要左右各自有一个boolean值,但是取反只要有唯一的一个boolean值即可;
5. 三元运算符
  • 格式数据类型 变量名称 = 条件判断 ? 表达式A : 表达式B;

    int a = 10;
    int b = 20;
    int max = a > b ? a : b;
    System.out.print;n(max); // 20
    
  • 注意

    • 必须同时保证表达式A和表达式B都符合左侧数据类型的要求。

      //错误
      int result = 3 > 4 ? 2.5 : 10;  
      
    • 三元运算符的结果必须被使用。

      System.out.println(a > b ? a : b);
      
      //错误
      a > b ? a : b
      

三、方法入门

1. 方法的定义
  • 格式:方法名称的命名规则使用小驼峰式。

    public static void funcName(){
        funcbody
    }
    
  • 方法定义的先后顺序无所谓。

  • 方法的定义不能产生嵌套包含关系。

  • 方法定义好之后,不会执行的。如果想要执行,一定要进行方法的调用。

2. 方法的调用
  • 调用方法:funcName();

四、JShell简单使用

  • 打开

  • 使用

  • 关闭

五、编译器的两点优化

1. 对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含的为我们补上一个(byte)/(short)/(char)
  • 如果右侧没有超过左侧的范围,编译器补上强转。
  • 如果右侧超过了左侧范围,那么编译器直接报错。
2. 编译器的常量优化
  • 在给变量进行复制的时候,若右侧表达式当中全都是常量,没有任何变量,那么编译器 javac 将会直接将若干个常量表达式计算得到结果。编译之后,得到的 .class 字节码文件当中已直接计算出。
  • 注意:一旦表达式当中有变量参与,那么就不能进行这种优化了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值