StringBuffer & StringBuilder & String,常用类

String类的本质StringBuffer和StringBuilder 常见包装类

一、 String类

特点

String用于保存字符串

String创建对象

“hello” 默认就是 一个String的对象(实例)

1、通过构造方法

String str = new String(“hello”);

2、直接赋值

String str = “hello”;

1、★★问题思考?

两种创建对象方式的区别:

直接赋值:

先去常量池中查看 是否有字面值一样的 空间,如果没有则创建,如果有,则直接 指向。

通过构造方法:

肯定会在堆中创建空间,空间中的字符串值引用了 常量池中的字面上的值。
如果常量池中有和字面值一样的空间,则直接引用,否则 就创建

2、★★问题思考?

String str=new String("hello");创建了几个对象

创建了两个对象

3、★★问题思考?

String str="hello"+"world";创建了几个对象

创建了 三个对象

"hello"/"world"/"helloworld"

str+="xiaohua";每次拼接都要新开空间,所以效率比较低

原因:字符串保存的是常量,一旦开辟空间,里面的值不能更改!

String类的常用方法

见已发布String相关javaSe基础博客文章

二、 StringBuffer类

(1)特点

String类的增强版

实质上也是保存字符串,但 增删改的话是在原来的空间上,不需要新开辟空间,效率 比较高!!

StringBuffer

1、创建对象
    通过构造器

2、常用方法
    append追加
    insert插入
    replace修改
    delete删除
    reverse反转
    length获取长度
    indexOf获取字符或字符串第一次出现的索引
    lastIndexOf 获取字符串或字符串最后一次出现的索引

3、String和StringBuffer的转换

    String——StringBuffer
        通过构造器
    StringBuffer——String
        通过toString

4、StringBuffer和StringBuilder、String对比

    《1》效率不同,StringBuilder>StringBuffer>String

    《2》StringBuffer和StringBuilder都是保存字符串变量

    《3》增删改操作都是在自身基础上修改,不用重新开辟空间,String 保存字符串常量

         每次增删改都需要重新开辟空间。

    《4》StringBuffer 线程安全、同步、效率低、版本老的,        
        StringBuilder线程不安全、不同步、   

    《5》效率高、版本新的

1、★★思考问题

String和StringBuffer的区别

String 保存字符串 常量
StringBuffer 保存字符串 变量

(2)创建对象

StringBuffer s = new StringBuffer(“hello”);

(3)StringBuilder/StringBuffer/String对比

String 保存字符串常量,里面的值不能更改

StringBuffer和StringBuilder保存字符串变量,里面的值可以更改


                线程安全        同步        效率        版本

 StringBuilder  不安全         不同步        高         新(1.5)

StringBuffer    安全           同步         低         老(1.0)

效率
StringBuilder>StringBuffer>String

常见方法

见代码:

  public class TestStringBuffer {
  public static void main(String[] args) throws Exception {

    //创建StringBuffer对象

    StringBuffer s = new StringBuffer("hello");

    //方法一:append 追加
    /*
     * 特点:
     * 
     * ☆可以在本身基础上追加
     * ★可以追加任意类型
     * ★返回类型 :StringBuffer
     */

//      s.append("张三");
//      s.append("李四");
//      s.append(true);
//      s.append('男');
//      s.append(1.5);
//      s.append(100);     

    System.out.println(s.append("张无忌").append("周芷若").append("小昭"));

    //方法二:insert  插入

    System.out.println(s.insert(8, true));;

    //方法三:replace 修改
    /*
     * 参数1: 要替换的起始索引(包含)
     * 参数2:要替换的结束索引(不包含)
     * 参数3: 新的元素
     */

    System.out.println(s.replace(8, 12, "曹小华"));;

    //方法四:delete 删除
    /*
     * 参数1: 要删除的起始索引(包含)
     * 参数2:要删除的结束索引(不包含)
     */

    System.out.println(s.delete(11, s.length()));;

    //indexOf、lastIndexOf、length、substring

    //-------------String类和StringBuffer的转换--------------
    /*
     * String——StringBuffer,通过构造器
     * StringBuffer——String,通过 toString方法
     */

    StringBuffer bu1=new StringBuffer("hlll");

    String string = bu1.toString();

三、包装类

1、概念:

将基本类型 包装成 对应的引用类型,保存的数值一样,但可以有属性和方法

2、对应关系

byte-Byte
short-Short
int-Integer
long-Long
float-Float
double-Double
char-Character
boolean-Boolean

3、自动装箱和拆箱

自动装箱(基本类型——包装类)
    Integer i = 10;
自动拆箱(包装类——基本类型)
    int a= i;
    int x=i+3;

4、类型转换

《1》Integer和String之间

Integer——String
         调用方法toString
         拼接字符串
String——Integer
         Integer i=new Integer(string);
         调用方法valueOf

《2》Integer和int之间

    Integer——int
        自动拆箱
        调用方法intValue
    int——Integer
        自动装箱
        Integer i=new Integer(int);

《3》int和String之间

    int——String
        拼接字符串
    String——int
        调用方法parseInt

《4》Character类的常见方法

isLetter      确定指定字符是否为字母。
isUpperCase   确定指定字符是否为大写字母。
isLowerCase   确定指定字符是否为小写字母。
isDigit       确定指定字符是否为数字
toUpperCase   使用取自 UnicodeData 文件的大小写映射信息将字符参数转换为大写。
toLowerCase   使用取自 UnicodeData 文件的大小写映射信息将字符(Unicode 代码点)参数转换为小写。

四、常用类方法

1、此类用于演示Date类的使用
按格式显示当前日期

public class TestDate {

public static void main(String[] args) {

    Date d = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

    String strDate = sdf.format(d);

    System.out.println(strDate);
}

}

2、此类用于演示日历(Calendar)类的使用

public class TestCalendar {

public static void main(String[] args) {

    //创建Calendar对象

    Calendar  c=Calendar.getInstance();

    System.out.println(c);
    //调用方法
    int year = c.get(Calendar.YEAR);

    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);

    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);

    int second = c.get(Calendar.SECOND);


    System.out.println(year+"年"+(month+1)+"月"+day+"日  "+hour+":"+minute+":"+second);
}

}

3、此类用于演示(System)类的使用

public class TestSystem {
public static void main(String[] args) {

    //方法一:exit退出程序
    System.out.println("hehehhe");

//      System.exit(0);
//      System.out.println("hhahahha"); 已退出未执行

    //方法二:arrayCopy
    /*
     * 参数1:源数组
     * 参数2:源数组 复制的起始索引
     * 参数3:目标数组
     * 参数4:目标数组的起始索引
     * 参数5:复制的个数
     */

    int[] src={1,2,3};

    int[] dest=new int[src.length];
    System.arraycopy(src, 0, dest, 1, src.length-1);
    for (int i = 0; i < dest.length; i++) {
        System.out.println(dest[i]);
    }

    //方法三:currentTimeMillens,单位ms

    long start = System.currentTimeMillis();

    //执行某段代码花费了一定时间

    long end = System.currentTimeMillis();


    //方法四:getProperties 获取系统属性

    System.out.println("-----------------------------------");
    Properties properties = System.getProperties();

    properties.list(System.out);
}

}

4、此类用于演示(Character)类的使用

public class TestCharacter {
public static void main(String[] args) {

    Character c=new Character('a');

    Character c2 ='a';//自动装箱

    char ch=c2;//自动拆箱

    //调用方法

    // 判断
    System.out.println(Character.isLetter('4'));
    System.out.println(Character.isLetter('x'));
    System.out.println(Character.isDigit('4'));
    System.out.println(Character.isDigit('*'));
    System.out.println(Character.isUpperCase('M'));
    System.out.println(Character.isLowerCase('M'));

    //和String之间的转换

    //将String  转换成  char[]

    String str="abc";
    char[] chs = str.toCharArray();

// for (int i = 0; i < chs.length; i++) {
// System.out.println(chs[i]);
// }
//

    //将char  转换成 String

    String string = c2.toString();

    System.out.println(string);
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章