妖碧落

导航

String类

java.lang.Object
  java.lang.String     java.lang包下,不需要导包就可以使用


"abc" 可以看做 字串符对象
  String s = "abc" abc 是一个对象
字符串是一个常量,一旦被赋值就不能被改变
       s = "cde" //原来的"abc"对象变成垃圾了


常见构造方法:
    * A:常见构造方法
    * public String():空构造
      String s1 = new String(); * public String(byte[] bytes):把字节数组转成字符串
      byte[] arr1 = {97,98,99};
      String s2 = new String(arr1); // 输出 abc * public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串 * public String(char[] value):把字符数组转成字符串
      char[] arr3 = {'a','b','c','d','e'};
      String s4 = new String(arr3);
      System.out.println(s4); //输出abcde * public String(char[] value,int index,int count):把字符数组的一部分转成字符串 * public String(String original):把字符串常量值转成字符串
*/

关注点:
  
public static void demo1() {
        String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1 == s2);         //  true 
        // 常量池 没有这个字符串 就创建一个  如果有就直接用  所以s1  和 s2 地址值是同一个  指向常量池的地址
        System.out.println(s1.equals(s2));  //  true
    }

public static void demon2() {
        String s1 = new String("abc");      // 创建了2个对象
    }  //   先在常量池里 创建一个"abc"   对象,再在堆里创建一个   指向常量池里的 "abc"   

public static void demo3() {
        String s1 = new String("abc");  // 记得是 堆内存的地址值      常量池的副本
        String s2 = "abc";  // 记录的是 常量池的地址值
        System.out.println(s1 == s2);        //false
        System.out.println(s1.equals(s2));  //true
    }

public static void demo3() {
        String s1 = new String("abc");  // 记得是 堆内存的地址值      常量池的副本
        String s2 = "abc";  // 记录的是 常量池的地址值
        System.out.println(s1 == s2);        //false
        System.out.println(s1.equals(s2));  //true
    }

public static void demo4() {
        String s1 = "a" + "b" + "c";
        String s2 = "abc";
        System.out.println(s1 == s2);         // true
        //  java有常量优化机制
        System.out.println(s1.equals(s2));   // true
    }

public static void demon5() {
        String s1 = "ab";
        String s2 = "abc";
        String s3 = s1 + "c";
        System.out.println(s3 == s2);  // false
        //  s3是变量 不是常量     
        System.out.println(s3.equals(s2));
    }
  //  加号 + 拼接字符串 :底层是通过StringBuilder 或StringBuffer实现的
  //  s3= s1 + "c"  :   先是一个StringBuilder 对象 "ab" ,通过append() 方法  拼接上"c",  变成"abc"   ,再用toString() 转成字符串对象"abc"将地址值 赋给s3

 

   
String类的判断功能
  
public static void main(String[] args) {
        //demo1();  String 类重写了equals()方法
        String s1 = "woaini";
        String s2 = "ni";
        String s3 = null;  
        // null 是空常量  可以給任意引用类型赋值,""不行
        String s4 = "";
        System.out.println(s1.contains(s2));     //  是否包含
        System.out.println(s1.startsWith("h"));
        System.out.println(s1.endsWith("a")); 
        System.out.println(s3.isEmpty());// null 是空常量  不能调用任何方法 否则报空指针异常 
        System.out.println(s4.isEmpty());// ""是空字符串 ,也是字符串的一种,只能给字符串赋值
    }

 

posted on 2019-08-05 11:34  妖碧落  阅读(120)  评论(0编辑  收藏  举报