String用法

String 类相关

一. == 和 equals

  1. == 是两个字符串的内存地址的比较,如果内存地址一致,则为true,否则为false

  2. equals 是比较两个字符串的值,如果值一样,则为true,否则为false;

  3. hashcode 是字符串的初始地址,

  4. 每个字符串都会有一个value,表示该字符串的字符序列值,是一个char[] 数组

    public class StringView {
    	// == 和 equals
        public static void main(String[] args) {
            /**
             * == 是比较内存地址是否一致
             * equals是比较字符序列是否一致,即字符串的值
             * 一个字符串的hashcode其实是这个对象的初始地址,空字符串的hashcode值为0
             */
            String str1 = "asd";
            String str2 = "asd";
            System.out.println("str1==str2结果为:" + str1 == str2);
            System.out.println("str1.equals(str2)结果为:" + str1.equals(str2));
    
            System.out.println("str1的hashCode:" + str1.hashCode());
            System.out.println("str2的hashCode:" + str2.hashCode());
    
            //创建两个对象 一个在常量池 一个在堆内存
            String str3 = new String("xyz");
            String str4 = "xyz";
    
            System.out.println("str3==str4结果为:" + str3 == str4); //false
            System.out.println("str3.equals(str4)结果为:" + str3.equals(str4)); //true
    		
            //因为str3和str4对应的字符串序列是一致的,所以hashcode也是一致的
            System.out.println("str3的hashCode为:" + str3.hashCode()); 
            System.out.println("str4的hashCode为:" + str4.hashCode()); 
        }
    }
    

二.String类实现的接口

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    ......
}

可以看出String类实现了序列化接口,比较器接口和字符序列接口,下面分别说明下各接口的左右及常用接口方法

  1. Serializable 序列化接口:字符串序列化和反序列化

  2. Comparable 比较器接口,可以自定义比较方法

    public class StringComparable {
    
        public static void main(String[] args) {
            String s = "abc";
            String t = "abdf";
            /**
             * String 比较器实现:
             * 1.先比较两个字符串的长度,从中得到较小的一个minLength 
             * 2.循环while(index < minLength)两个字符序列,比较每位的大小
             * 3。如果循环结束没结果,就返回长度的差值
             */
            System.out.println(s.compareTo(t));//-1
        }
    }
    
  3. CharSequence 字符序列接口,,即操作字符相关的接口方法

public class StringChar {

    public static void main(String[] args) {
        //String 实现的字符序列相关接口
        String x = "asdasdasd";
        //charAt 返回对应位置的字符
        System.out.println(x.charAt(1));//s
        //length 返回长度
        System.out.println(x.length());//9
        //chars 返回对应字符ascii码的IntStream
        IntStream chars = x.chars();
        chars.forEach(System.out::println);
        System.out.println(x.chars());
        //endPoints 返回对应字符ascii码的整型流
        IntStream intStream = x.codePoints();
        intStream.forEach(System.out::println);
        //subSequence 返回截取的字符序列
        CharSequence charSequence = x.subSequence(0, 3);
        System.out.println(charSequence.toString());//asd
    }
}

三.内置方法

四.常用方法

posted @ 2020-11-12 22:40  decoo  阅读(116)  评论(0)    收藏  举报