Java数据类型与类型转换

    |     2015年3月30日   |   Java 语法基础   |     0 条评论   |    1372

Java 是强类型语言:声明变量必须写明数据类型。变量占一块内存,不同类型占的大小不同。

基本类型一共 8 种:4 种整型、2 种浮点型、1 种字符型、1 种布尔型。它们之间可以自动提升,也可以强制转换,但强制转换可能丢精度。

一、八种基本类型

整型日常用 int;特别大的数用 long(原文用「投放广岛长崎的原子弹释放能量」来形容数量级)。byte、short 多见于底层文件处理、或要压存储的大数组。

Java 整型长度与平台无关,换机器不用改类型;C/C++ 整型长度跟平台走,64 位上稳定的程序搬到 32 位可能溢出。Java 没有无符号类型(unsigned)。

字面量:八进制前缀 0(010 等于十进制 8);十六进制 0x(0xCAFE);Java 7 起二进制前缀 0b(0b1001 等于 9),也可用下划线分隔数字:1_000_000,编译器会丢掉下划线。

类型 位数 要点
byte / short / int / long 8 / 16 / 32 / 64 默认用 int;long 字面量加 L
float 32 大约 6~7 位有效数字,字面量必须加 F/f
double 64 大约 15 位有效数字;不带后缀的小数默认就是 double
char 16 单引号一个字符,Unicode
boolean JVM 未规定 只有 true / false,不能当 0/1 做算术

float 必须带 F 或 f:float x = 223.56F;。double 可写 D/d,不写也行。多数情况直接用 double,float 精度经常不够。

public class Demo {
    public static void main(String[] args) {
        char webName1 = '新';
        char webName2 = '华';
        char webName3 = '苑';
        System.out.println("网站的名字是:" + webName1 + webName2 + webName3);

        short x = 22;     // 十进制
        int y = 022;      // 八进制,等于十进制 18
        long z = 0x22L;   // 十六进制,等于十进制 34
        System.out.println("转化成十进制:x = " + x + ", y = " + y + ", z = " + z);

        float m = 22.45f;
        double n = 10;
        System.out.println("计算乘积:" + m + " * " + n + "=" + m * n);
    }
}
// 运行结果:
// 网站的名字是:新华苑
// 转化成十进制:x = 22, y = 18, z = 34
// 计算乘积:22.45 * 10.0=224.50000762939453

即使浮点看起来是整数,打印时也会带小数点。乘积末尾那一串是 float 二进制舍入的正常现象,不是打印写错。

二、布尔型:不是 C 语言的 0 和 1

C 语言里条件成立常得到 1、否则 0,可以当整数用。Java 的条件结果是 true / false,独立成一种类型,不能和 int 互相赋值。原文写「true 等同于 1」容易误导,那是 C 的习惯,不是 Java 的规则。

public class Demo {
    public static void main(String[] args) {
        boolean a = 100 > 10;
        boolean b = 100 < 10;
        System.out.println("100>10 = " + a);
        System.out.println("100<10 = " + b);

        if (a) {
            System.out.println("100>10是对的");
        } else {
            System.out.println("100<10是错的");
        }
    }
}
// 运行结果:
// 100>10 = true
// 100<10 = false
// 100>10是对的

原文把最后一行印成「100<10是对的」,和 if (a) 对不上,已按代码改正。

三、自动转换与强制转换

自动转换在运算中悄悄发生,一般从位数低的类型升到高的;强制转换必须在代码里写 (类型),方向不限,但可能丢精度。

自动提升顺序:byte, short, char → int → long → float → double。不同类数据先对齐再运算:两个操作数里「更宽」的那个决定结果类型;byte/short/char 单独运算会先升成 int。

public class Demo {
    public static void main(String[] args) {
        int x;
        double y;
        x = (int) 34.56 + (int) 11.2;     // 截成 34 + 11 = 45,丢精度
        y = (double) x + (double) 10 + 1; // 45.0 + 10.0 + 1 → 56.0
        System.out.println("x=" + x);
        System.out.println("y=" + y);
    }
}
// 运行结果:
// x=45
// y=56.0

一句话总结:八种基本类型长度与平台无关;小数默认 double、boolean 只有 true/false;低到高可自动升,反向必须强制转并接受可能丢精度。

转载请注明来源:Java数据类型与类型转换
本文链接地址:https://ai.zhousir.top/?p=62

上一篇:

下一篇:

回复 取消