zoukankan      html  css  js  c++  java
  • Java基本数据类型

    java有8中数据类型:

    数据类型 大小 表示的范围
    boolean 1字节或4字节 0或1
    byte 1字节 -128~127
    short 2字节 -32768~32767
    char 2字节 Unicode0~Unicode2^16-1
    int 4字节 -2^31~2^31-1
    long 8字节 -2^63~2^63-1
    float 4字节  
    double 8字节  

    关于float和double的范围和精度问题可以参看这篇文章以及这篇文章

    为什么boolean的长度既可以是1字节也可以是4字节呢?

    理由来源是《Java虚拟机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。

    数据类型的转换:

    8种数据类型,我们可以将它们分为3个大类别:整数,浮点数和布尔值。

    整数有5种,它们都是按照补码来编码的,分别是byte、short、char、int、long五种类型。

    浮点数有两种,float和double。

    布尔值就只有boolean一种了。

    同一大类别之间的转换规则其实很简单。范围小的可以自动转换为范围大。范围的大小肯定是数据类型的位数有关了。范围最小的肯定是byte,范围最大的是long。所以把byte转化成long,那是一点问题都没有。可以直接用等号连接起来,也叫做隐式转换。如果你想将范围大的转换为范围小的,则必须强转。

    下面写代码举例:

    public class Main{
        public static void main(String[] args) {
            byte b1 = 100;
            short s1= 200;
            int  i1 = 300;
            long l1 = 400L;
            char ch = 'a';
            
            i1 = b1;
            b1 = (byte) i1;
            l1 = i1;
            i1 = (int) l1;
            s1 = (short) ch;
            ch = (char) s1;
            i1 = ch;
            ch = (char) (i1+1);
            System.out.println(i1);//输出97
            System.out.println(ch);//输出b
            System.out.println(ch+0);//输出98
        }
    }

    int的是java默认的运算数据类型,定义long类型时数据后面加L。

    因为java的运算都是int类型的,所以:

    char a= 'a';

    char b= a+1;

    编译报错,必须这样写:char b= (char)(a+1);

    public class Main{
        public static void main(String[] args) {
            int  i1 = 300;
            long l1 = 400L;
            
            float f1 = 23.7f;
            double d1 = 28.99;
            
            f1 = i1;
            i1 = (int) f1;
            
            f1 = l1;
            l1 = (long) f1;
        }
    }

    虽然float和int都是4字节,但是float表示的范围更大,更广,所以int到float可以,float到int必须强转,甚至long到flaot都是强转。

    不知道大家有没有这样的疑问?

    int i=1;

    flaot f1=1f;

    float f2 = 1.0f;

    这三个数是否相等呢?

    public class Main{
        public static void main(String[] args) {
            int i=1;
            
            long l = 1;
            
            float f1=1f;
            float f2 = 1.0f;
            
            double d1 = 1;
            double d2 = 1.0;
            
            //以下输出全为true
            System.out.println(i==f1);
            System.out.println(i==f2);
            System.out.println(l==f1);
            System.out.println(l==f2);
            System.out.println(f1==f2);
            System.out.println(i==d1);
            System.out.println(i==d2);
            System.out.println(f1==d1);
            System.out.println(f1==d2);
        }
    }

    补充一点:

    public class Main{
        public static void main(String[] args) {
            String s= "1";
            char ch = '1';
            System.out.println(s.equals(ch));
            //以下语句报异常,不可将对象和基本数据类型用==比较
            System.out.println(s==ch);
        }
    }

    char和String是没有可比性了,不可能相等的。当我们去看String的equals()方法原码时,方法的参数虽然是Object但是,方法内部会判断Object instanceof String。

  • 相关阅读:
    自考过后的总结——如何快乐学习?
    自考总结——数据库原理第三章
    机房收费系统——用户权限和功能分析
    SQL视频总结
    学生信息管理系统总结——数据库的访问方式
    学习信息管理系统总结——数据库的连接和访问(一)
    学生信息管理系统总结——student数据库中表关系分析
    Kafka-文件管理
    Kafka-分区分配规则
    Kafka-处理请求(生产请求、获取请求)
  • 原文地址:https://www.cnblogs.com/loren-Yang/p/7522554.html
Copyright © 2011-2022 走看看