Java基础语法——数据类型 & 类型转换

数据类型 & 类型转换

一、数据类型

1. 常用基本数据类型

数据类型关键字内存占用取值范围
整数类型byte1-128 ~ 127
short2-32768 ~ 32767
int4- 2147483648 ~ 2147483647
long8-9223372036854775808 ~ 9223372036854775807
浮点类型float4负数:-3.402823E+38到-1.401298E-45 正数:1.401298E-45到3.402823E+38
double8负数:-1.797693E+308到-4.9000000E-324 正数:4.9000000E-324到1.797693E+308
字符类型char20 ~ 65535
布尔类型boolean1true , false
1.1 说明
  • E+38: 乘以 10^38,其他同理
  • E-38 :乘以 10^-38,其他同理
  • 整数默认是int类型
  • 浮点数默认是double类型
  • long类型赋值时需要在数字后加上 L
  • float类型赋值时需要在数字后面上上 F
1.2 代码示例
public class 数据类型 {
    public static void main(String[] args) {
        //整数
        int num1 = 10; //最常用
        byte num2 = 20;
        short num3 = 30;
        long num4 = 30L;//Long类型要在数字后面加个L

        //小数;浮点数
        float num5 = 30.1F; //float类型要在数字后面加个F
        double num6 = 3.14159;

        //字符
        char name = '中'; //占两字节

        //类String不是关键字
        //String name = "中国";

        //布尔值:是非
        boolean flag = true;
        //boolean flag = false;
    }
}
1.3 拓展<代码示例>
1.3.1 整数拓展
public class IntegerDemo {
    public static void main(String[] args) {
        //进制
         int i = 10;     //十进制
         int i2 = 010;   //八进制 0
         int i3 = 0x10;  //十六进制 0x  0-9 A-F
         int i4 = 0b10;  //二进制 0b

        System.out.println(i);    //10
        System.out.println(i2);   //8
        System.out.println(i3);   //16
        System.out.println(i4);   //2

    }
}
1.3.2 浮点数拓展
public class DoubleDemo {
    //银行业务怎么表示
    //BigDecimal 数字工具类
    //最好完全避免使用浮点数进行比较
    public static void main(String[] args) {
        float f = 0.1f;    //0.1
        double d = 1.0/10; //0.1

        System.out.println(f==d);  //false

        float d1 = 12345646546f;
        double d2 = d1 + 1;

        System.out.println(d1==d2);  //ture

        //浮点数 有限 离散 舍入误差 大约 接近但是不等于
    }
}
1.3.3 字符拓展
public class CharDemo {
    public static void main(String[] args) {
        char c1 = 'a';
        char c2 = '中';

        System.out.println(c1);

        System.out.println((int)c1); //强制转换

        System.out.println(c2);

        System.out.println((int)c2); //强制转换

        //所有的字符本质还是数字
        //编码 Unicode表   (97 = a  65 = A)  2字节  0-65536
        //U0000-UFFFF

        char c3 = '\u0061';  //61为16进制
        System.out.println(c3);  //a
    }
}
1.3.3.1 常用的转义字符
转义字符功能
\t一个制表位,实现对齐功能
\n换行
\\输出一个 \
\"输出一个 "
\’输出一个 ’
\r表示一个回车,使光标回到当前行的行首。如果之前该行有内容,则会被覆盖;
1.3.4 布尔拓展
public class BooleanDemo {
    public static void main(String[] args) {
        boolean flag = true;
        if (flag == true) { }
        if (flag) { }
        // 二者意义相同
        // less is More 代码要精简易读
    }
}

2. 引用类型

2.1 类
2.2 接口
2.3 数组

二、类型转换

1. 数据范围排序<从小到大>

image-20210812155538775

2. 自动类型转换

2.1 概述
  • 把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的,直接书写即可
2.2 代码示例
public class 类型转换 {
    public static void main(String[] args) {
        //自动转换     低 --> 高
        int i = 128;
        double b = i;

        System.out.println(i);  //128
        System.out.println(b);  //128.0
    }
}

3. 强制类型转换

3.1 概述
  • 把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量。

  • 强制类型转换格式

    • 目标数据类型变量名= (目标数据类型)值或者变量
      
3.2 代码示例
public class 类型转换 {
    public static void main(String[] args) {
        //强制转换  (类型)变量名 高 -->低
        int i = 128;
        byte b = (byte)i;

        System.out.println(i); //128
        System.out.println(b); //-128 内存溢出 byte字节范围为 -128-127
    }
}

4. 注意事项

  • 不能对 布尔值 进行转换

  • 不能把对象类型转换为不相干的类型

  • 在把高容量转换到低容量的时候,强制转换,转换的时候可能存在内存溢出或是精度问题

    • 精度问题

      System.out.println((int)23.3)  //23
      
    • 溢出问题

      public class 溢出问题 {
          public static void main(String[] args) {
              //操作比较大的数的时候,注意溢出问题
              //JDK7新特性,数字之间可以用下划线分割
              int money = 10_0000_0000;
              int years = 20;
              int total = money*years;
              System.out.println(total); //-1474836480,计算的时候溢出了
          }
      }
      ===========================================================================
      public class 溢出问题 {
          public static void main(String[] args) {
              int money = 10_0000_0000;
              int years = 20;
              long total = money*years;  //默认是int,转换之前已经存在问题
              System.out.println(total); //-1474836480
          }
      }
      ============================================================================
      public class 溢出问题 {
          public static void main(String[] args) {
              int money = 10_0000_0000;
              int years = 20;
              long total = money*(long)years;  //先把一个数转换成Long
              System.out.println(total); //20000000000
          }
      }
      
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值