zoukankan      html  css  js  c++  java
  • Day11_包装类

    Day11_包装类

    基本数据类型==>引用数据类型

    基本数据类型==>引用数据类型==>继承关系

    byte Byte Number==>Object

    short Short Number==>Object

    int Integer Number==>Object

    long Long Number==>Object

    float Float Number==>Object

    double Double Number==>Object

    char Character Object

    boolean Boolean Object

    为什么引用包装类

    1. 面向对象—操作类,将基本数据类型分装成对应的包装类,就是为了获取某些属性,方法
    2. 集合,特点:只能存放引用数据类型。

    类Integer

    1. 使用Integer类不需要导包
    2. Integer类使用手册链接
    3. Integer底层就是一个int类型数据,就是对这个数据进行的封装

    学会使用API使用手册

    点击上方的Integer类使用手册链接,找到对应的API,查看各种说明,用的较多的是以下几个:

    • 构造方法摘要
    • 方法摘要

    代码演示

    public class Demo01 {
        public static void main(String[] args) {
            System.out.println(Integer.MAX_VALUE);
            System.out.println(Integer.MIN_VALUE);
    
            //物极必反
            System.out.println(Integer.MAX_VALUE+1);
            System.out.println(Integer.MIN_VALUE-1);
    
            //构造方法摘要Integer(12)
            Integer i1=new Integer(12);//int--->Interger
            Integer i2=new Integer("123");//String--->Interger
    
            //int--->Integer,自动装箱
            Integer i3=12;//Integer i3 = Integer.valueOf(12);
            //自动拆箱,Integer--->int
            int i4=i1;
    
            //各种方法
            System.out.println(i1.compareTo(i2));
            System.out.println(i1.equals(i2));//true
            System.out.println(i1==i2);//false,因为两个对象指向的地址不同
    
            //JDK1.5之后,对于自动装箱来说,要是在-128~127之中,直接返回给你数(从内部类的y一个缓存数组中获取)
            //如果没在-128~127之中,要开辟新空间,所以对象的地址不同
            Integer i5=12;
            Integer i6=12;
            Integer i7=129;
            Integer i8=129;
            System.out.println(i5==i6);//ture
            System.out.println(i7==i8);//false
    
            int i9=i1.intValue();
            System.out.println(i9);
    
            
        }
    }
    

    输出:

    2147483647
    -2147483648
    -2147483648
    2147483647
    -1
    false
    false
    true
    false
    12
    

    String类

    StringBuilder

    public class Demo02 {
        public static void main(String[] args) {
            String str="abc";//不可变字符串
            StringBuilder sb1 = new StringBuilder();//可变字符串
            StringBuilder sb2 = new StringBuilder(23);//新建一个长度为23的字符串
            StringBuilder sb3 = new StringBuilder("abc");//此时sb3指向的是默认长度为19(初始字符串的长度+16)的char[]类型数组
            sb3.append("kkkkk");//插入5个k之后,字符串的总长度仍未超过19,此时sb3指向的地址不变,直接从原数组第4个位置开始添加
            System.out.println(sb3.capacity());
    
            sb3.append("tttttttttttttttttttt");//插入20个t后,字符串的长度已超过19,此时会新建一个char[]类型数组,长度为(原数组长度*2+2)
            //然后将原数组所有元素复制给新数组,再把新插入的20个t从新数组第9个位置开始添加
            System.out.println(sb3.capacity());
    
            //若新数组的长度超过int的数值范围,即大于21亿多,或者此时新数组的长度仍小于插入后数组的实际长度,则将插入后数组的实际长度作为新数组的长度
            sb3.append("tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt");
            //此处插入80个t,字符串的长度为108(原字符串实际的长度28+新插入的字符串的长度80)
            System.out.println(sb3.capacity());
            //推荐将StringBuilder源码过一遍
        }
    }
    

    输出:

    19
    40
    108
    

    String、StringBuilder和StringBuffer的区别

    StringBuilder JDK 1.5 效率高 线程不安全

    StringBuffer JDK 1.0 效率低 线程安全

    ​ String 是字符串常量,属于对象,String的值是不可以改变的,所以只要操作一次String,就会产生一个新的string对象,效率低下,还浪费内存空间,从源码上看private final char value[];,底层是一个由final修饰的字符串数组,这就解释了为什么string的值是不可改变的。如果需要对字符串进行修改,就要用stringbuffer或者stringbuilder。

    ​ StringBuffer和StringBuilder就不一样了,两者都继承了AbstractStringBuilder抽象类,从AbstractStringBuilder这个抽象类中可以看到char[] value;,从底层源码中可以看到没有被final修饰,所以他们都是可以改变的字符串数组,所以如果需要对字符串频繁操作时,建议使用stringbuffer或者stringbuilder。

    不同点:

    StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。而string类会产生新的对象

    StringBuilder 类和 StringBuffer 之间的不同在于 StringBuilder 的方法不是线程安全的。

    StringBuffer之所以是线程安全的,也可以从底层源码中可以看到该类被synchronized同步块修饰

    由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。如果要求线程安全的情况下,则必须使用 StringBuffer 类。

    在多线程情况下操作大量的数据推荐使用StringBuffer

    在单线程情况下操作大量的数据推荐使用StringBuilder

  • 相关阅读:
    详解 exception
    如何转换音频数据格式1
    解说一个简单的Win32程序
    java通过jxl.jar实现excel导入导出
    linux2.6.32在mini2440开发板上移植(8)之添加ADC驱动程序
    Hut 1997 Seven tombs
    python help dir stackoverflow docs google遇到python问题怎么样解决
    802.11n兼容a/b/g问题(Legacy mode,Mixed mode,Greenfield mode)
    gperf的使用
    ubuntu terminal 关闭防火墙
  • 原文地址:https://www.cnblogs.com/gaoyao/p/13424025.html
Copyright © 2011-2022 走看看