包装类
  1. double -----> Double

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

    byte Byte Number ----->Object

    short Short

    int Integer

    long Long

    float Float

    double Double Number ----->Object

    char Character Object

    boolean Boolean

2.为什么要引入包装类

  • 面向对象----操纵类,将基本数据类型封装成为对应的包装类,就是为了获取某些属性,方法。

  • 集合,特点:只能存放引用数据类型

3.是不是有了包装类,就不用基本数据类型?不是的,各有应用场合

  • 基本数据类型:形参,局部变量。优势,节省内存

4.Integer类

  • 使用Integer不需要导包 因为它是属于java.lang下的 父类为Number---->Object

  • 已实现的接口:Serializable,Comparable<Integer>

  • Integer底层就是一个int类型数据,就是对这个数据进行的封装 private final int value;

public class 包装类 {
    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);//-2147483648
        System.out.println(Integer.MIN_VALUE-1);//2147483648
        //必须用有参构造创建,参数为int或者String
        Integer i1 = new Integer(12);
        Integer i2 = new Integer("12");//如果是"abc",会抛出数字格式异常
        //自动装箱:int--->Integer
        Integer i3 = 12;//反编译可得   Integer i3 =Integer.valueOf(12);
        //自动拆箱:Integer--->int
        int i4 = i1;
​
        //各种方法
        System.out.println(i1.compareTo(i2)); //  return (x<y)? -1:((x==y)?0:1);   小于-1,等于0,大于1
        System.out.println(i1.equals(i2));//true
        System.out.println(i1 == i2);//flase
        Integer i5=12;
        Integer i6=12;
        Integer i7=129;
        Integer i8=129;
        System.out.println(i5 == i6);//true
        System.out.println(i7 == i8);//false
        //JDK1.5之后,对自动装箱来说,要是在-128,127中,直接返回给你数(从内部类中的一个缓存数组中获取)
        //如果没在-128,127中,要开辟空间
        int i9 = i1.intValue();//Integer--->int
        int i10 = Integer.parseInt("13");//String--->int
    }
}
String
  • String是常量,不可变 public final class String

  • String中通过char数组储存字符串 private final char value[];

public class String123 {
    public static void main(String[] args) {
        String s1 = "你好,世界!";//s1.value[你,好,,,世,界,!]
        System.out.println(s1);
        String s2 = new String("abc");
        String s3 = new String(new char[]{'a','c','b'});
        System.out.println(s1.length());//6
        System.out.println(s1.isEmpty());//  return value.length == 0;
        System.out.println(s1.charAt(1));//好
        
        String s4 = new String("abcdefg");
        int num = s4.indexOf('f');//5
        
        String s5 = s4.substring(2);
        System.out.println(s5);//cdefg
        System.out.println(s4.substring(2,5));//[2,5)--cde
        
        String s6 = s2.concat(s4);
        System.out.println(s6);//abcabcdefg
​
        String s7 = s6.replace('a', 'k');
        System.out.println(s7);//kbckbcdefg
        
        String s8 ="     a  b     c ";
        System.out.println(s8.trim());//去掉首尾空格符
    }
}
StringBuilder
  • char[] value; int count;//value存储字符串,count 记录字符使用的数量

public class StringBuilder123 {
    public static void main(String[] args) {
        String str = "abc";//不可变字符串
        StringBuilder sb1 = new StringBuilder();//可变字符串  默认为长度为16的数组
        StringBuilder sb2 = new StringBuilder(23);
        StringBuilder sb3 = new StringBuilder("abc");//创建一个3+16长度的数组,将参数数组copy进该对象数组中,count+=3
        sb3.append("kkkkk");//abckkkk   数组长度为19 count+=5
        sb3.append("tttttttttttttttttttttt");//超出原有长度,创建新数组,并将数据拷贝入新数组,长度为所需x*2+2.value指向新数组 count=x
        
        //增删改查
        StringBuilder s1 = new StringBuilder("nihaoyashijie");
        s1.append("你好");//增  nihaoyashijie你好
        s1.delete(3,6);//删除在[3,6)上的字符   nihashijie你好
        s1.deleteCharAt(10);//删除位置在10的字符  nihashijie好
        StringBuilder s2 = new StringBuilder("123456789");
        s2.insert(3,"K");
        System.out.println(s2);//改 插入  123K456789
        s2.replace(3,5,"你好呀");
        System.out.println(s2);//改  替换   123你好呀56789
        s2.setCharAt(3,'!');
        System.out.println(s2);//改   替换   123!好呀56789
​
        for (int i = 0; i < s2.length(); i++) {
            System.out.print(s2.charAt(i)+" ");//查
        }
        System.out.println();
        String s3 = s2.substring(2,4);//截取[2,4)返回的是一个新的String,对StringBuilder没有影响
        System.out.println(s3);
        System.out.println(s2);
    }
}
StringBuilder与StringBuffer区别联系
  • StringBuilder JDK 1.5 效率高 线程不安全

  • StringBuffer JDK 1.0 效率低 线程安全