云计算百科
云计算领域专业知识百科平台

【Java数据类型】

文章目录

      • 字面常量
      • 数据类型
      • 什么是字节?
      • 变量
      • 类型转换
      • 类型提升
      • 字符串类型

字面常量

定义:常量即程序运行期间,固定不变的量称为常量。

分类:

  • 字符串常量:由""括起来的,如“12345”、“hello”、“你好”。
  • 整形常量:如:100、1000
  • 浮点数常量:如:3.14、0.49
  • 字符常量:由单引号括起来的当个字符,如:‘A’、‘1’
  • 布尔常量:只有true和false
  • 空常量:null
  • 数据类型

    两类:基本数据类型(四类八种)和引用数据类型。四类:整型,浮点型,字符型,布尔型。(字符串是引用类型)

    补充知识: 包装类指的是,基本数据类型对应的类类型。因为基本数据类型无法进行对象化处理,所以就引入了包装类。 在这里插入图片描述

  • float和doubel类型都有精度损失。
  • 浮点类型float、double的数据不适合在不容许舍入误差的金融计算领域。如果需要精确数字计算或保留指定位数的精度,需要使用BigDecimal类。
  • 随便写一个小数字面量默认是double类型。
  • 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文。 5.Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法。 6.Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令,在Oracle公司的虚拟机实现中,boolean占1个字节。
  • 什么是字节?

    计算机中最小存储单位:bit(每个0或1就是一个位)。 计算机中基本存储单元:Byte(B)(是计算机用于计算存储容量的基本单位) 转换关系: 8 bit = 1 Byte 1024 Byte = 1KB 1024 KB = 1MB 1024 MB =1GB 1024 GB = 1TB

    变量

    定义:经常改变的量就是变量。

    数据类型 变量名 = 初始值;

    注意: 命名一个变量时尽量给一个初始值。(程序在调用时如果没有给变量赋值,编译时会报错)

    注意: 1.在一行可以定义多个相同类型的变量。如:int a1 = 10, a2 =20, a3 = 30; 2. float a = 2.8f;类型是float值的后面加f。因为随便写一个小数都是double类型。 3. long = 299L;类型是long值后面加L,小写会误看成1。 4. 赋值时不要超过类型的范围,否则会报错。

    类型转换

    在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐式) 和 强制类型转换(显式)。

    (1)自动类型转换:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点 是数据范围小的转为数据范围大的时会自动进行。

    如:

    int a = 2;
    long b = 100L;
    b = a;//a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值
    a = b;//编译报错,long的范围比int范围大,会有数据丢失,不安全

    byte b1 = 100; // 编译通过,100没有超过byte的范围,编译器隐式将100转换为byte
    byte b2 = 257; // 编译失败,257超过了byte的数据范围,有数据丢失

    (2)强制类型转换: 当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点: 数据范围大的到数据范围小的。

    int a = 10;
    long b = 100L;
    b = a; // int–>long,数据范围由小到大,隐式转换
    a = (int)b; // long–>int, 数据范围由大到小,需要强转,否则编译失败
    float f = 3.14F;
    double d = 5.12;
    d = f; // float–>double,数据范围由小到大,隐式转换
    f = (float)d; // double–>float, 数据范围由大到小,需要强转,否则编译失败
    a = d; // 报错,类型不兼容
    a = (int)d; // int没有double表示的数据范围大,需要强转,小数点之后全部丢弃
    byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换
    byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错
    boolean flag = true;
    a = flag; // 编译失败:类型不兼容
    flag = a; // 编译失败:类型不兼容

    注意:

  • 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型。
  • 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失。
  • 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查。
  • 强制类型转换不一定能成功,不相干的类型不能互相转换。
  • 范围小的可以隐式转换成大的范围,但范围大的不能直接转换成小的,需要强制转换,否则报错。
  • 类型提升

    定义:不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。

  • int与long之间:int会被提升为long。
  • int a = 10;
    long b = 20;
    int c = a + b; // 编译出错,long 赋值给int时会丢失数据
    long d = a + b; // 编译成功

  • byte与byte的运算。
  • byte a = 10;
    byte b = 20;
    byte c = a + b;
    System.out.println(c)//报错

    报错如下: 在这里插入图片描述 原因: byte 和 byte 都是相同类型, 但是出现编译报错.。程序运行a + b 会先将 a和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 最后将结果赋值给c。int类型赋值给byte类型需要强制转换,故报错。

    补充知识: 由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据。 为了硬件上实现方便, 诸如 byte 和 short这种低于 4 个字节的类型, 会先提升成 int, 再参与计算。

    上面正确做法:

    byte a = 10;
    byte b = 20;
    byte c = (byte)(a + b);
    System.out.println(c)

    结论:

  • 不同类型的数据混合运算, 范围小的会提升成范围大的。
  • 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算。
  • 字符串类型

    在Java中使用String类定义字符串。

    String s1 = "Hello";
    String s2 = " World";
    System.out.println(s1+s2);//加号表示字符串拼接

    字符串和整形数字转换;

  • int转String
  • int num = 120;
    // 方法1
    String str1 = num + "";//xxx+一个字符串等于字符串
    // 方法2
    String str2 = String.valueOf(num);

  • String转int
  • String s = "110";
    int num = Integer.parseInt(s);

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 【Java数据类型】
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!