Java-基本数据类型 和 引用类型、包装类

文章详细介绍了Java中的基本数据类型,包括整数、浮点、字符和布尔类型,以及引用类型如String、封装类、接口等。同时,讨论了包装类的作用,特别是Integer的装箱和拆箱机制,强调了在不同情况下的相等性判断。此外,还对比了使用包装类与基本数据类型进行运算的性能差异,显示基本类型在运算上更高效。文章最后展示了不同类型间的转换方法,如String与数值类型之间的转换,以及列表和字符串的转换操作。
摘要由CSDN通过智能技术生成

一、基本数据类型:8种

        整数类型:int(4字节)、long(8)、short(2)、byte(1)
        浮点类型:double(8)、float(4)
        字符类型:char(2)
        布尔型:boolean

二、引用类型:

                String类型、封装类、接口、类、枚举、注解类型、数组类型

三、包装类

| 基本数据类型 | 包装类    |
| ------------ | --------- |
| byte         | Byte      |
| short        | Short     |
| int          | Integer   |
| long         | Long      |
| float        | Float     |
| double       | Double    |
| boolean      | Boolean   |
| char         | Character |

         1、使用注意方面:

                1、Integer:

public class Test3 {
    public static void main(String[] args) {
        Integer i1 = 11;//装箱
        int i2 = 11;
        Integer i3 = Integer.valueOf(11);
        Integer i4 = new Integer(11);

        //存在基本类型; int = Integer.valueOf()、Integer、new Integer()
        System.out.println("A:"+(i1 == i2));//true
        System.out.println("B:"+(i2 == i4));//true
        System.out.println("C:"+(i2 == i3));//true

        // Integer在声明初始化时,会先判断大小是否在-128到127之间(常量池);
        // 在区间内:Integer = Integer.valueOf(20)   true
        // 不在区间内:Integer != Integer.valueOf(220)   false
        System.out.println("D:"+(i1 == i3));//false

        // Integer在声明初始化时,会先判断大小是否在-128到127之间(常量池);
        // 不管在不在区间 Integer.valueOf(220) 永不等于 new Integer(220)
        // Integer.valueOf(11):已缓存对象的引用;
        // new Integer():重新在堆内开辟空间,引用的地址也发生变化;所以两个引用地址不一致;
        System.out.println("E:"+(i3 == i4));//false

        //相当于  把 Integer 拆箱成int 来作比较
        System.out.println("F:"+(i3.equals(i4)));//true
    }
}

        2、性能方面                

                1、装箱:基本数据类型->包装类型;
                2、拆箱:包装类->基本数据类型;
                3、装箱和拆箱向堆中申请空间,频繁的创建会导致导致堆空间碎片很多;相比而言,基本类型的运算则高效很多

long start = System.currentTimeMillis();
Long sum = 0L; // 使用包装类相加
for (long i = 0; i < Integer.MAX_VALUE; i++) {
    sum += i;
}
System.out.println(sum);
long end = System.currentTimeMillis();
System.out.println("耗时:"+(end-start)/1000.0);
// 输出:
// 2305843005992468481
// 耗时:15.175
start = System.currentTimeMillis();
long sum = 0L;
for (long i = 0; i < Integer.MAX_VALUE; i++) {
    sum += i; // 使用基本数据类型相加
}
System.out.println(sum);
long end = System.currentTimeMillis();
System.out.println("耗时:"+(end-start)/1000.0);
// 输出:
// 2305843005992468481
// 耗时:1.643
两者代码的区别仅仅在于前者的sum为包装类Long,后者的sum为基本类型long

 

五、基本类型 与 包装类型 之间的转换

public class TestDemo {
    public static void main(String[] args) throws IOException {

        //String 转 int: 两种方法
        String st = "100";
        int ita = Integer.parseInt(st);
        int ita2 = Integer.valueOf(st).intValue();
        System.out.println("String 转 int: 两种方法:"+ita+","+ita2);

        //int 转 String  三种方法
        int at = 100;
        String ast = String.valueOf(at);
        String ast2 = Integer.toString(at);
        String ast3 = "" + at;
        System.out.println("int 转 String  三种方法:"+ast+","+ast2+","+ast3);

        //long 转 String 两种方法
        long lg = 100L;
        String alg = String.valueOf(lg);
        System.out.println("long 转 String:"+alg);

        //String 转 long  两种方法
        String lst = "111";
        long sum1= Long.valueOf(lst).longValue();
        long sum2 = Long.parseLong(lst);
        System.out.println("String 转 long 两种方法:"+sum1+","+sum2);

        //Long 转 String
        Long Lg = 200L;
        String alg2 = Long.toString(Lg);
        System.out.println("Long 转 String:"+alg2);

        //String 转 Long
        String ssl = "100";
        Long lss = Long.valueOf(ssl);
        System.out.println("String 转 Long:"+alg2);

        //long 转 Long
        long ll = 100;
        Long llg = ll;//自动装箱拆箱
        Long llg2 = Long.valueOf(ll);
        System.out.println("long 转 Long:"+llg+","+llg2);

        //Long 转 long
        Long ggl = 100L;
        long gl = ggl.longValue();
        System.out.println("Long 转 long:"+gl);

        //Long 转 int
        Long lga = 100*100L;
        int li = lga.intValue();
        System.out.println("Long 转 int:"+li);

        //int 转 Long
        int il = 100;
        Long  ilg = Long.valueOf(String.valueOf(il));
        System.out.println("int 转 Long:"+ilg);

        //long 转 int
        int li2 = Math.toIntExact(lga);
        System.out.println("long 转 int:"+li2);

        //int 转 long
        int lgi = 100;
        long igl = Long.valueOf(lgi).intValue();
        System.out.println("int 转 long:"+igl);

        //char 转 int 三种方法
        char ch = '8';
        int b1 = ch - '0';
        int b2 = ch - 48;
        int b3 = Integer.parseInt(Character.toString(ch));
        System.out.println("char 转 int 三种方法:"+b1+","+b2+","+b3);

        //int 转 char
        int ci = 8+48;
        char ci1 = (char)ci;
        System.out.println("int 转 char:"+ci1);

        //char 转 String 两种方法
        char ccl = '9';
        String stc = String.valueOf(ccl);
        String stc2c = Character.toString(ccl);
        System.out.println("char 转 String 两种方法:"+stc+","+stc2c);

        //String 转 char[]
        String stg = "abcd";
        char[] cst = stg.toCharArray();
        char cst2 = stg.charAt(0);
        System.out.println("String 转 char[]:"+cst+""+cst2);


        //将int 插入 list中,并转换成字符串
        List<Integer> list = new ArrayList<>();
        list.add(2);
        list.add(1);
        list.add(3);
        String ss = list.toString();
        System.out.println("int to list,to string ->" + ss);//[2, 1, 3]

        //将char[] 转换成  string
        char[] helloArray = {'r', 'u', 'n', 'o', 'o', 'b'};
        String helloString = new String(helloArray);
        System.out.println("char[] to string ->" + helloString);//runoob

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值