基本数据类型与引用数据类型及其区别

 Java语言把数据类型分为基本类型和引用类型

一、基本类型

基本类型分为数值类型和boolean型

1.boolean型

 boolean类型的变量的取值只能是true和false,例如下面的代码定义了一个boolean的变量a,他被赋值为true。

public class Test01 {
    public static void main(String[] args) {
        boolean a = true;
    }
}

在Java的源程序中,不允许把整数或者null赋值给boolean的变量,这是与其他高级语言有区别的,例如以下代码。

public class Test01 {
    public static void main(String[] args) {
        boolean a = 0;
        boolean b = null;
    }
}

 二者的报错类型相同,都是类型不匹配。

2.数值类型

数值类型又细分为整数类型,浮点数类型,字符类型。

整数类型

整数类型中包含btye,short,int,long

在定义一个变量时,我们应该选择哪种数据类型,要考虑实际的需求和程序的性能。

在Java语言中如果数学表达式中都是整数,那么表达式的返回值只能是int类型或者long类型,如果想把返回值赋给short或者byte类型的变量,就必须进行强制类型转换,例如下面的代码

public class Test01 {
    public static void main(String[] args) {
        byte a = 0;
        a = a + 6;//编译报错,显示类型不匹配
        a = (byte)(a + 6);//强制类型转换后,编译通过
        short b = 0;
        b = b + 7;//编译报错,显示类型不匹配
        b = (short) (b + 7);//强制类型转换后,编译通过
    }
}
字符类型

char是字符类型。在Java编程时有些特殊字符,假如不知道他的Unicode编码,,直接从键盘中输入会报错,为了解决这个问题,Java语言采用转义字符来表示特殊字符例如

public class Test01 {
    public static void main(String[] args) {
        char a = '\'';
        System.out.println(a);//打印一个单引号
        char b = '\\';
        System.out.println(b);//打印一个反斜杠
        char c = '\"';
        System.out.println(c);//打印一个双引号
    }
}
浮点类型

浮点类型分为float类型和double类型;float占4个字节,共32位,称为单精度浮点型;double占8个字节,共64位,称为双精度浮点型;在使用浮点型进行数学运算时,会导致一些误差,例如下面的程序

public class Test01 {
    public static void main(String[] args) {
        float a = 0;
        for(int i=0;i<26;i++){
            a+=0.1f;
        }
        System.out.println(a);//打印结果2.5999997
    }
}

他与实际结果相差0.0000003。

double类型采用64位来表示浮点数,精确度比float类型要高,例如下面的程序

public class Test01 {
    public static void main(String[] args) {
        double a = 0;
        for(int i=0;i<26;i++){
            a+=0.1;
        }
        System.out.println(a);//打印结果2.600000000000001
    }
}

他与实际结果相差0.000000000000001;

当浮点数强制转换成整数时,产生的舍入误差会更加严重,因为强制转换成整数类型时会舍弃非整数部分,例如

public class Test01 {
    public static void main(String[] args) {
        double a = 19.0 * 0.01;
        System.out.println(a);//打印结果0.19
        System.out.println((int)(a * 100));//打印结果18
    }
}

二、引用类型

引用类型可以分为类引用类型、接口引用类型、数组引用类型,(所有的非基本数据类型都是引用数据类型)以下代码定义了三个引用变量

        Work work;
        java.lang.Runnable myThread;
        int[] aArray;

其中work变量为类引用类型;myThread为接口引用类型,myThread是接口引用类型,是因为java.lang.Runnable是接口不是类;aArray为数组引用类型;类引用类型的变量引用这个类或者其子类的实例,接口引用类型的变量引用实现了这个接口类的实例,数组引用类型的变量引用这个数组类型的实例。

三、基本类型与引用类型的区别

1.存储位置
在方法中声明的变量

在方法中声明的变量可以是基本类型变量也可以是引用类型变量

当声明是基本类型变量时,其的变量名和变量值会放在Java虚拟机栈中;当声明的是引用变量时,所声明的变量是放在Java虚拟机的栈中,该变量所指向的对象是放在堆类存中的。

传递方式

值传递

基本数据类型赋值都属于值传递,值传递传递的是实实在在的变量值,是传递原参数的拷贝,值传递后,实参传递给形参的值,形参发生改变而不影响实参。

引用传递

引用类型之间赋值属于引用传递。引用传递传递的是对象的引用地址,也就是它的本身。引用传递:传的是地址,就是将实参的地址传递给形参,形参改变了,实参当然被改变了,因为他们指向相同的地址。

适用场景

基本数据类型适用于简单的数值计算和存储;

引用数据类型适用于需要共享数据或复杂数据结构的场景。

区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值