java中八种基本数据类型

java中的基本数据类型

  在java中有一句话叫做一切皆对象,这句话我是这么理解的:java中所有的操作的基本单位都是一个一个的对象。但java中有八种数据类型不是对象。为什么会存在这种特殊的类型呢!这里我引用java编程思想中的一句原话:
  在程序设计中经常用到一系列类型,他们需要特殊对待。可以把它们想象成“基本”类型,之所以特殊对待,是应为new将对象储存在‘堆’里,故用new创建一个对象——特别是非常小的、简单的变量不是很有效,他们不用new来创建对象,而是创建一个并非是引用的“自动”变量。这个变量直接储存值,并置于堆栈之中,因此更加有效。
  java不是一切皆对象吗?有基本数据类型不矛盾吗?因为八种基本数据类型有对应的包装类,所以并不影响说java不是一切皆对象

八种基本数据类型

在这里插入图片描述
  虽然long和double都是64位,但是double的取值范围比long要广,因为浮点数和整数用位的表示方式不同。float和int同理。
  和其他语言比较不同的是,java中的char是两个字节所以能存一个汉字。
  它们的默认值只有是属性的时候才会有,如果是局部变量,在使用前必须赋值,不然报错。
  java中的整数类型默认是int类型。long a=21000000000l,超过了int的值,后面要跟l,或者强转。
  小数默认是double,float a=5.5f,后面要跟f或强转,float只能精确到7位小数。
  char和short虽然都是16位,但是取值范围不同,所以不能互相赋值。但是可以short a=‘a’ ,char c=100;但是不能a=c或者c=a;
  boolean虽然可以用1或者零就可以表示,但是并不是只占一位。不同的虚拟机实现不同,在HotSpot 1.8中,boolean变量的长度为4 Byte,而boolean数组中,每个boolean长度为1 Byte。

基本数据类型重载

java中基本数据类型会发生重载,并且会发生精度提升匹配:

 public void display(byte var){
        System.out.println("这是byte方法"+var);
    }
    public void display(short var){
        System.out.println("这是short方法"+var);
    }
    public void display(char var){
        System.out.println("这是char方法"+var);
    }
    public void display(int  var){
        System.out.println("这是int方法"+var);
    }
    public void display(long var){
        System.out.println("这是long方法"+var);
    }
    public void display(float var){
        System.out.println("这是float方法"+var);
    }
    public void display(double var){
        System.out.println("这是double方法"+var);
    }
    public void display(boolean var){
        System.out.println("这是boolean方法"+var);
    }

我在main方法中执行以下内容

  BaseType baseType=new BaseType();
        byte var1=1;
        short var2=1;
        char var3=1;
        int var4=1;
        long var5=1;
        float var6=1;
        double var7=1;
        boolean var8=false;

        baseType.display(var1);
        baseType.display(var2);
        baseType.display(var3);
        baseType.display(var4);
        baseType.display(var5);
        baseType.display(var6);
        baseType.display(var7);
        baseType.display(var8);

因为存在对应的方法,所以会执行对应的方法。输出以下内容:
在这里插入图片描述

当我去掉第一个display方法时,由于没有参数byte类型的方法,当实参为byte类型时,他会去寻找看是否有short类型的方法,如果没有再去找int,一直找到“最近”的那个类型。输出如下:
在这里插入图片描述
short和char因为都是2个字节,所以属于同一级别。当实参为short或char时,如果没有对应的方法,会去找参数为int的方法。
对应的提升路径:

  1. byte->short->int->float->double
  2. char->int->float->double

但是高精度的实参,就不能使用低精度或者说低范围参数的方法。

思考一下执行system.out.println(1.0/0)会发生什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值