JAVA的数据类型

本文详细介绍了Java中的基本数据类型与引用数据类型,包括它们的取值范围和底层原理。讨论了float和double之间的转换规则,以及int和long类型的溢出处理。此外,还阐述了不同数据类型之间的转换,特别是整型与浮点型以及char与int之间的转换。最后,简单介绍了数组的基本概念,包括一维数组和二维数组的默认值和特点。
摘要由CSDN通过智能技术生成

一、数据类型

1.基本数据类型与引用数据类型:

基本数据类型(8个):

  • 字节(1个): byte (1 byte = 8 bit , 可表示 -128 ~ +127 范围内的整数)
  • 整型(4个): short(2 byte)、 int(4 byte)、 long(8 byte)
  • 浮点型(2个):float(4 byte)、 double(8 byte)
  • 字符型(1个):char(2 byte) --> Unicode编码
  • 布尔型(1个):boolean(1 bit) --> true / false

引用数据类型:

除了基本数据类型之外的都是引用数据类型,比如:

  • 字符串String
  • 数组[]
  • 类class
  • 接口interface
  • 枚举enum
  • 注解 @interface

2.基本数据类型的取值范围

代码如下:

System.out.println("byte   取值范围:" + Byte.MIN_VALUE + " ~ "+ Byte.MAX_VALUE);
System.out.println("short  取值范围:" + Short.MIN_VALUE +" ~ "+ Short.MAX_VALUE);
System.out.println("int型  取值范围:" + Integer.MIN_VALUE +" ~ "+ Integer.MAX_VALUE);
System.out.println("long   取值范围:" + Long.MIN_VALUE +" ~ "+ Long.MAX_VALUE);

System.out.println("float  取值范围:" + Float.MIN_VALUE +" ~ "+ Float.MAX_VALUE);
System.out.printf ("float  取值范围:%f ~ %f\n",Float.MIN_VALUE,Float.MAX_VALUE);
System.out.println("double 取值范围:" + Double.MIN_VALUE +" ~ "+ Double.MAX_VALUE);
System.out.printf ("double 取值范围: %f ~ %h\n", Double.MIN_VALUE,Double.MAX_VALUE);

//十六进制格式输出
System.out.printf("char   取值范围:%h ~ %h\n",Character.MIN_VALUE,Character.MAX_VALUE);
System.out.printf("boolean  的取值:%b 和 %b\n",Boolean.TRUE,Boolean.FALSE);

运行结果如下:
在这里插入图片描述

3.数据的底层原理

1.JAVA中的 float 和 double:

问题:定义一个 flaot 型小数 ,会被报错。
在这里插入图片描述
解决:在所定义的float型数值后面加个字母 F。
在这里插入图片描述
原因:因为系统默认,浮点数为double型,系统将一个double型数值转化为我们自己定义的float型数值,由 8 byte --> 4 byte 会产生数据损失,因此报错。

2.JAVA中的 int 和 long:

问题:int型 共有 4x8=32 bit,
取值范围为 :-2147483648 ~ 2147483647
long型 64 bit,但当变量数值超过int型的取值范围时,依然会报错。
在这里插入图片描述
解决:在所定义的long类型数值后面加个字母 L。
在这里插入图片描述
原因:系统认为,int型的取值范围已经能够满足人们的日常需要,所以默认将long型变量的值存储为int型。 故当我们定义的long型变量的值超出int型的取值范围时,需要在其数值的末尾加上字母L,加以声明。

4.数据类型之间的转换

1.同种数据类型之间的转换:

1>.小空间变量内的数据可以直接转换为大空间变量。如
int型数据可以直接转换为long型数据;
float型数据可以直接转换为double型数据。

2>.大空间变量内的数据转换到小空间变量内,会存在数据损失。
如:(附有解释说明)

在这里插入图片描述

2.整型与浮点型之间的转换:

例:long型数据转换为 浮点数float型 ,以及double型。
在这里插入图片描述

3.char与int之间的转换:

在这里插入图片描述
在这里插入图片描述

二、数组简介

1.一维数组

一维数组的默认值:
引用数据类型 ,默认值为 null

数据类型单个元素的默认值
int[]是 0
float[]和 double[]是 0.0
boolean[]是 false
String[]是 null
  • 注意:
    数组之间直接赋值(用‘=’号)相等,两个数组使用的是同一地址空间

2.二维数组 :

理解二维数组的本质
二维数组是以一维数组作为元素的数组。二维数组 int[2][3]内,包含 2个一维数组,每个一维数组的长度为3

三、程序源码

public class DataType {

    /**
     * 基本数据类型(8个):
     * 字节(1个):  byte    (1 byte = 8 bit , 可表示 -128 ~ +127 范围内的整数)
     * 整型(4个): short(2 byte)、  int(4 byte)、    long(8 byte)
     * 浮点型(2个):float(4 byte)、   double(8 byte)
     * 字符型(1个):char(2 byte) -->  Unicode编码
     * 布尔型(1个):boolean(1 bit) --> true / false
     *
     * 引用数据类型:
     * 数组[]、  类class、  接口interface、 枚举enum、 注解 @interface
     */

    public static void main(String[] args) {

        /**
         * float 不加 F 会报错,
         * 因为系统默认,浮点数为double型,
         * 而系统将一个double型数值转化为我们自定义的float型数值,由 8 byte --> 4 byte 会产生数据损失
         */
        float a = 3.4F;
        double b = 3.4;

        /**
         * int型 共有 4✖8=32 bit,取值范围为 :-2147483648 ~ 2147483647
         * 系统认为,int型的取值范围已经能够满足人们的日常需要,默认将long型变量的值存储为int型,
         * 故当我们定义的long型变量的值超出int型的取值范围时,需要在其数值的末尾加上字母L,加以声明。
         */
        int c = 2147483647;
        long d = 2147483648L;



        System.out.println("byte   取值范围:" + Byte.MIN_VALUE + " ~ "+ Byte.MAX_VALUE);
        System.out.println("short  取值范围:" + Short.MIN_VALUE +" ~ "+ Short.MAX_VALUE);
        System.out.println("int型  取值范围:" + Integer.MIN_VALUE +" ~ "+ Integer.MAX_VALUE);
        System.out.println("long   取值范围:" + Long.MIN_VALUE +" ~ "+ Long.MAX_VALUE);

        System.out.println("float  取值范围:" + Float.MIN_VALUE +" ~ "+ Float.MAX_VALUE);
        System.out.printf ("float  取值范围:%f ~ %f\n",Float.MIN_VALUE,Float.MAX_VALUE);
        System.out.println("double 取值范围:" + Double.MIN_VALUE +" ~ "+ Double.MAX_VALUE);
        System.out.printf ("double 取值范围: %f ~ %h\n", Double.MIN_VALUE,Double.MAX_VALUE);

        //十六进制格式输出
        System.out.printf("char   取值范围:%h ~ %h\n",Character.MIN_VALUE,Character.MAX_VALUE);
        System.out.printf("boolean  的取值:%b 和 %b\n",Boolean.TRUE,Boolean.FALSE);




        /**
         * int型 1234的二进制数为:100 1101 0010
         * 而转化为 byte型时,只能存储后8位,即1101 0010,计算机存储的是 数据的补码,
         * 由上述的 后8位数据可知,此数为负数,其真值为 -010 1110 = -46
         */
        int h = 1234;
        byte g = (byte)h;
        System.out.println("\nint型  "+ h + " 转换为 byte型 的数值为:"+ g);


        /**
         * float型 和 double型 的表示范围均比 long型 的表示范围大,
         * 但是 较大 或者 较小 的整数,在用 float进行表示时,会造成数值上的精度损失。
         */
        long   k = -1234567898765L;
        float  l = k;
        double m = k;
        System.out.println("long型 "+ k + " 转换为  float型 的数据值为:"+ l);
        System.out.println("long型 "+ k + " 转换为 double型 的数据值为:"+ m);



        /**
         * char型 与 int型 之间的转换:
         * 1.char型 转换为 int型,可直接转换。
         * 2.int型 转换为 char型,需要强制转换,否则会被报错。
         */
        char n = 'a';
//        char n = '祎';
        int i = n;
        System.out.println("\nchar型 "+ n + " 转换为  int型 为:"+ i);


        int p = 97;
//        int p = 31054;
        char r = (char) p;
        System.out.println("int型 "+ p + " 强制转换为  char型 为:"+ r);



        /**
         *      char        int
         *       A          65
         *       a          97
         *      '0'         48
         */
        char t = '0';
        System.out.println("\n字符 '0' 的 int值 为:"+ (int)t );// 48

        int z ='2';
        System.out.println("int z ='2', 则 z = "+z); //50

        char y = 65;
        System.out.println("char y = 65, 则 y = "+y); //A


    }
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值