Java基础(七)String、StringBuffer、StringBuilder

1.Scanner    final修饰,不能继承

文本扫描器,遇到\r\n 结束

2.String类概述

 

String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

 

3.String构造方法

 

将字节数组、字符数组转换成字符串,可以选择索引起始

4.String面试题

        String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1.equals(s2));                    //true
        System.out.println(s1 == s2);                         //true
        String s3 = new String("abc");
        System.out.println(s1.equals(s3));                    //true
        System.out.println(s1 == s3);                         //false
        String s4 = "a" +"b"+"c";
        System.out.println(s1 == s4);                         //true,java中有常量优化机制
        System.out.println(s1.equals(s4));                    //true
        String s1_1 = "ab";
        String s5 = s1_1 + "c";
        System.out.println(s5.equals(s1));                    //true
        System.out.println(s5 == s1);                         //false,任何数据与字符串用+串联都会产生新的字符串

分为常量池与堆内存

 

4.String 方法

boolean isEmpty()

String s = null;

s.isEmpty();           //  nullpointer  错误

subString() 包含头不包含尾

/**
         * getBytes()
         */
        String s1 = "abc";
        byte[] arr = s1.getBytes();
        for (byte b:arr){
            System.out.print(b+" ");    //97 98 99
        }
        String s2 = "你好你好";
        byte[] arr2 = s2.getBytes();    //通过gbk码表将字符串装换成字节数组
        for (byte b:arr2){
            System.out.print(b +" ");   //-28 -67 -96 -27 -91 -67 -28 -67 -96 -27 -91 -67
                                        //gbk码表一个中文代表两个字节,gbk码表第一个字节肯定是负数
        }

        /**
         * toCharArray
         * valueof
         */
        String ss1 = "abc";
        char[] ss_arr = ss1.toCharArray();
        for (char c: ss_arr){
            System.out.println(c);
        }

        char[] arrs = {'a','b','c'};
        String ss2 = String.valueOf(arrs);              //底层是由String类的构造方法完成的
        System.out.println(ss2);

trim()只去掉首尾的空格

compareTo()按照码表值比较,查找的是unicode码表值

先比较首字符,再次是第二个字符,都一样后,比较长度

        String s1 = "abc";
        String s2 = "bcd";
        String s3 = "abc";
        String s4 = "acd";
        String s5 = "abcedf";

        System.out.println(s1.compareTo(s2));        //-1
        System.out.println(s1.compareTo(s3));        //0
        System.out.println(s1.compareTo(s4));        //-1
        System.out.println(s1.compareTo(s5));        //-2

        String ss1 = "我";
        String ss2 = "你";
        System.out.println(ss1.compareTo(ss2));      //4785

5.StringBuffer

(1)概述    线程安全的可变字符序列    (String是一个不可变的字符序列)

(2)方法

 append、insert、deleteCharAt、delete、replace、reverse             返回值为StringBuffer

 substring   返回值为String

(3)StringBuffer和String的相互转换

* A:String -- StringBuffer
    * a:通过构造方法
    * b:通过append()方法
* B:StringBuffer -- String
    * a:通过构造方法
    * b:通过toString()方法

    * c:通过subString(0,length);

6.StringBuilder

面试题:

* String,StringBuffer,StringBuilder的区别

    * StringBuffer和StringBuilder的区别

    * StringBuffer是jdk1.0版本的,是线程安全的,效率低

    * StringBuilder是jdk1.5版本的,是线程不安全的,效率高

    * String和StringBuffer,StringBuilder的区别

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

    * StringBuffer,StringBuilder是可变的字符序列

    public static void main(String[] args) {
        String s = "abc";
        change(s);
        System.out.println(s);                               //abc

        StringBuffer sb = new StringBuffer();
        sb.append("abc");
        change(sb);
        System.out.println(sb.toString());                   //abcabc

    }

    public static void change(String s){
        s += "abc";
    }

    public static void change(StringBuffer sb){
        sb.append("abc");
    }

 

 

要点必看

1. +

“+”和“+=”是Java中仅有的两个被重载的操作符,为String对象所重载。

String  s =  "abc"+"def"+mango+47;

在上述代码中生成了4个String对象,每使用一次 + 的操作符就会生成一个新的对象,实际上执行过程中是创建一个StringBuilder对象,然后调用append()方法,最后再使用toString()方法,转成String类型。

(1)直接使用String +            在执行循环体中创建StringBuilder对象,每一次循环创建一个StringBuilder对象

(2)直接使用StringBuilder   append       在执行循环体外创建StringBuilder对象,只有一个StringBuilder对象,可以避免创建更多的StringBuilder对象。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值