java数据类型及其包装类中的一些事

摘要

在Java基础中,数据类型及其对应的包装类是我们必学的内容,但是大部分学习者对其中的一些地方还是处在模棱两可的理解,本文我将针对这部分内容需要注意的地方做一些总结

相关问题

1.Java中的基本数据类型占几个字节

在Java中,

byte,boolean占1个字节,对应的包装类型分别为Byte Boolean

char short占2个字节,对应的包装类型分别为Character Short

int float占4个字节,对应的包装类型为Integer Float

long double占8个字节,对应的包装类型为Long Double

2.基本数据类型与包装类的区别

在Java中,数据类型分为两大类,基本数据类型与引用类型,所以在程序中,当基本书库类型和包装类的对象作为类的实例变量时,默认初始值是不同的。包装类对象的默认初始值为null,基本数据类型变量默认初始值根据变量类型不同而不同,入int整型的默认初始值为0等,另外,包装类是不可变类

我们来看看代码

public class DataTypeTest {
    byte b;
    Byte b1;

    boolean bb;
    Boolean bb1;

    char c;
    Character c1;

    short s;
    Short s1;

    Integer i;
    int i1;

    float f;
    Float f1;

    double d;
    Double d1;

    long l;
    Long l1;

    public static void main(String[] args){
        System.out.println("byte-->"+new DataTypeTest().b);
        System.out.println("Byte-->"+new DataTypeTest().b1);


        System.out.println("boolean-->"+new DataTypeTest().bb);
        System.out.println("Boolean-->"+new DataTypeTest().bb1);

        System.out.println("char-->"+new DataTypeTest().c);
        System.out.println("Character-->"+new DataTypeTest().c1);

        System.out.println("short-->"+new DataTypeTest().s);
        System.out.println("Short-->"+new DataTypeTest().s1);

        System.out.println("int-->"+new DataTypeTest().i);
        System.out.println("Integer-->"+new DataTypeTest().i1);

        System.out.println("float-->"+new DataTypeTest().f);
        System.out.println("Float-->"+new DataTypeTest().f1);
    
        System.out.println("double-->"+new DataTypeTest().d);
        System.out.println("Double-->"+new DataTypeTest().d1);

        System.out.println("long-->"+new DataTypeTest().l);
        System.out.println("Long-->"+new DataTypeTest().l1);
    }

}

打印结果

byte-->0
Byte-->null
boolean-->false
Boolean-->null
char--> 
Character-->null
short-->0
Short-->null
int-->0
Integer-->null
float-->0.0
Float-->null
double-->0.0
Double-->null
long-->0
Long-->null

3.在声明时需要注意的问题

1.我们在声明一个小数时应该使用double类型,比如1.2默认就是double类型的,一次对float类型的变量进行赋值的时候需要进行类型转换。如float i = 1.2f;

2.null不是一个合法的Object实例,所以虚拟机并没有为其分配内存,null仅仅用于表明该引用目前没有指向任何对象。

4.缓存策略

以Integer为例来说下缓存策略,对于Integer缓存,在类加载时就将-128到127的Integer对象创建了,并保存在cache数组中(Integer cache[]),一旦程序调用Integer.valueOf(i)方法,如果i的值在-128到127之间,就直接在cache缓存数组中去取Integer对象,不在此范围的话,就创建新的包装对象。这就是Integer的缓存策略。

我们可以看看Integer valueOf(i)的方法的源码:

public static Integer valueOf(int i){
  if(i >= -128 && i < IntegerCache.high){
     return IntegerCache.cache[i+128];
  }else{
     return new Integer(i);
  }

}

同理 Short的缓存范围在(-128——127),Long的范围为(-128——127),Float和Double没有缓存

下面是测试代码:

public class DataTypeTest {


    public static void main(String[] args){
        Integer integer1 =3;
        Integer integer2 = 3;
        System.out.println(integer1 ==integer2);

        Integer integer3 = 300;
        Integer integer4 = 300;
        System.out.println(integer3 == integer4);

        Integer a3 = new Integer(100);
        Integer a4 = new Integer(100);
        System.out.println(a3 ==a4);

        int a = 1000,b=1000;
        System.out.println(a==b);

        Integer c =1000,d=1000;
        System.out.println(c==d);

        Integer e =100,f=100;
        System.out.println(e==f);



    }


}

输出结果

true
false
false
true
false
true

另外,当Integer对象与int类型数值进行比较的时候,Integer会自动拆箱成为int类型再进行比较

5.原始数据类型与包装类作为参数传递时,都是按值传递

我们知道,Java方法中的参数的传递方式都是按值传递,当需要传递的参数为原始数据类型时,传递的是保存栈内存中的值,如果传递的参数为包装类型时,传递的是保存在栈内存中的包装类型的引用。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值