java之常用API(二)

来源:互联网 发布:虾米音乐vip 知乎 编辑:程序博客网 时间:2024/05/22 00:30

一,StringBuffer类

1,String和StringBuffer的区别:

  • String是一个不可变的字符序列
  • StringBuffer是一个可变的字符序列

2,StringBuffer,String和StringBuilder的区别:

  • StringBuffer和StringBuilder的区别

    • StringBuffer是jdk1.0版本的,是线程安全的,效率低(因为要检验锁)
    • StringBuilder是jdk1.5版本的,是线程不安全的,效率高
  • String和StringBuffer,StringBuilder的区别

    • String是一个不可变的字符序列
    • StringBuffer,StringBuilder是可变的字符序列

3,常用的方法

1,StringBuffer类,返回值都是StringBuffer.
  • A:StringBuffer的构造方法:
    • public StringBuffer():无参构造方法
    • public StringBuffer(int capacity):指定容量的字符串缓冲区对象
    • public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
  • B:StringBuffer的方法:

    • public int capacity():返回当前容量。 理论值
    • public int length():返回长度(字符数)。 实际值
  • C:添加元素的功能:

    • public StringBuffer append(String str):
    • public StringBuffer insert(int offset,String str):
  • D:删除字符的功能:

    • public StringBuffer deleteCharAt(int index):
    • public StringBuffer delete(int start,int end):
  • E:替换字符的功能:

    • public StringBuffer replace(int start,int end,String str):
    • public StringBuffer reverse()://字符串反转

以上功能方法有个特别要注意的事项:
就是以上方法都是有个共同的特点:底层源码均是return this;

    /*以下的所有增删方法操作,所有的引用都是指向同一个地址值.    (也就是说操作都是堆内存的同一个对象).因为底层是return this    */        StringBuffer sb=new StringBuffer("我爱中国ilovechina");        StringBuffer sb2=sb.append("11");        StringBuffer sb3=sb.append("22");        StringBuffer sb4=sb.append("33");        StringBuffer sb5=sb2.insert(3, true);        StringBuffer sb6=sb.delete(6, 8);        /*输出都是一样,因为引用指向的都是同一个对象*/        System.out.println(sb);        System.out.println(sb2);        System.out.println(sb3);        System.out.println(sb4);        System.out.println(sb5);

4,String与StringBuffer的转换

  • StringBuffer转为String类型

    • a:通过构造方法String(StringBuffer buffer)
      分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。
    • b:通过toString()方法
    • c:通过subString(0,length);
  • String 转为 StringBuffer 类

    • a:通过构造方法StringBuffer(String str)
      构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
    • b:通过append()方法

二,基本数据类的包装类

  • 基本类型和包装类的对应

    byte            Byteshort           Shortint             Integerlong            Longfloat           Floatdouble          Doublechar            Characterboolean         Boolean

举个一个代表的例子,即可说明所有包装类的特性:
这些包装类就是将基本数据类型包装成对象,以及封装了许多功能方法.

int – >String

  • a:和”“进行拼接;//常用
  • b:public static String valueOf(int i);//常用
  • c:int – Integer – String(Integer类的toString方法())
  • d:public static String toString(int i)(Integer类的静态方法)

String –>int

  • public static int parseInt(String s);

代码演示:

        String str="11111";        Integer.parseInt(str);//字符串转int        int i=3333;        str=i+"";//int 转成字符串        str=String.valueOf(i);//int 转成字符串        System.out.println(str);

JDK5新特性之自动装箱和拆箱

  • JDK5的新特性
    • 自动装箱:把基本类型转换为包装类类型
    • 自动拆箱:把包装类类型转换为基本类型
  • 案例演示
    • JDK5的新特性自动装箱和拆箱
Integer ii = new Integer(100);//通常的对象的创建步骤 Integer ii = 100;//有了自动装箱后,其实底层就是上一句的操作. ii += 200;//此处为自动拆箱,将Integer类对象的转换成了基本数据类型
  • 注意事项
    • 在使用时,Integer x = null;代码就会出现NullPointerException。
    • 建议先判断是否为null,然后再使用。

以下的代码需特别比较,你会发现一个有趣的问题:

        Integer i1 = new Integer(97);        Integer i2 = new Integer(97);        System.out.println(i1 == i2);//false        System.out.println(i1.equals(i2));//true        System.out.println("-----------");        Integer i3 = new Integer(197);        Integer i4 = new Integer(197);        System.out.println(i3 == i4);//false        System.out.println(i3.equals(i4));//true        System.out.println("-----------");        Integer i5 = 127;        Integer i6 = 127;        System.out.println(i5 == i6);//true,其实就是这里        System.out.println(i5.equals(i6));//true        System.out.println("-----------");        Integer i7 = 128;        Integer i8 = 128;        System.out.println(i7 == i8);//false,还有这里        System.out.println(i7.equals(i8));//true

从上面的结果以及查看源码Integer类中的IntegerCache可以知道
自动装箱和拆箱的范围在 -128~ 127之间是不会创建对象的,而是从常量池中获取,如果超过了byte取值范围,就会再创建一个对象.

0 0