注意事项

直接创建的字符串和引用创建的字符串的区别及字符串常量与引用值存放区别

package api.string.demo;

public class StringEquals {
    public static void main(String[] args) {
        /*
        下面这两种写法,字符串的值是没有发生改变的!
        有两个字符串:"Hello"和"java"保存在堆中的字符串常量池中
        str是保存在栈中的字符串的地址值,改变的只是地址值!
         */
        String str = "Hello";
        System.out.println(str);
        System.out.println(str.hashCode());//字符串"Hello"的地址值
        str = "java";
        System.out.println(str);
        System.out.println(str.hashCode());//字符串"java"的地址值

        String str1 = "Hello";
        String str2 = "Hello";
        char[] charArray = {'H', 'e', 'l', 'l', 'o'};
        String str3 = new String(charArray);

        //直接创建的字符串是在堆中的字符串常量池中!构造创建的字符串是在栈中的引用,是一个地址值!
        System.out.println(str1 == str2);//true
        System.out.println(str1 == str3);//false
        System.out.println(str2 == str3);//false

    }
}

常用方法

1、字符串内容比较

package api.string.demo;

public class StringEquals {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "Hello";
        char[] charArray = {'H', 'e', 'l', 'l', 'o'};
        String str3 = new String(charArray);

        // ==是进行对象地址值的比较,如果非要对字符串内容比较,则可以使用以下两个方法:
        /*【方法一】
        public boolean equals(Object obj);(任何对象都可以用Object接收)
        【注意】
        equals方法具有对称性:a.equals(b)和b.equals(a)效果一样
        如果比较一个常量和一个变量,推荐把常量字符串写在前面:“常量”.equals(变量名)*/
        System.out.println(str1.equals(str2));//true
        System.out.println(str2.equals(str3));//true
        System.out.println(str3.equals("Hello"));//true
        System.out.println("Hello".equals(str1));//true
        //如果比较一个常量和一个变量,推荐把常量字符串写在前面:“常量”.equals(变量名)
        String str4 = null;
        System.out.println("abc".equals(str4));//false
        System.out.println(str4.equals("abc"));//【报错】NullPointerException(空指针异常)

        /*
        【方法二】
        public boolean equalsIgnoreCase(String str);(忽略大小写,进行内容比较)
         */
        String strA = "Java";
        String stra = "java";
        System.out.println(strA.equalsIgnoreCase(stra));//true
        System.out.println(strA.equals(stra));//false
    }
}

2、字符串的常用转换相关方法

package api.string.demo;

public class ConversionString {
   //【字符串的常用转换相关方法】
   /*
   1.public char[] toCharArray():将当前字符串拆分成为字符数组作为返回值
   2.public byte[] getBytes():获取当前字符串底层的字节数组
   3.public String replace(CharSequence oldString,CharSequence newString):
   字符串的“内容替换”(将当前字符串中的oldString字符(串)替换为newString字符(串),返回这个新字符串)
   CharSequence:可以接收字符串类型。
    */
   public static void main(String[] args) {
       String str = "Hello";
       //转化为字符数组
       char[] chars = str.toCharArray();
       for (int i = 0; i < chars.length; i++) {
           System.out.println(chars[i]);
       }
       //转化为字节数组
       byte[] bytes = str.getBytes();
       System.out.println(bytes);
       for (int i = 0; i < bytes.length; i++) {
           System.out.println(bytes[i]);
       }
       //字符串的“内容替换”
       String replace = str.replace("l", "*");  //He**o
       //把str中的"l"替换成为"*"返回一个新的字符串
       System.out.println(replace);
   }
}

3、字符串截取方法

package api.string.demo;

public class InterceptSubString {
    //【字符串截取方法:】
    /*
    1.public String subString(int index):截取从参数索引位置一直到字符串末尾的内容,返回新的字符串。
    2.public String subString(int begin,int end):截取从begin参数索引位置到end参数索引位置中间的内容,返回新的字符串。【备注】[begin,end)
     */
    public static void main(String[] args) {
        String str = "HelloWorld!";
        String subStr = str.substring(5);// World
        System.out.println(subStr);
        String subStr2 = str.substring(4, 7);//oWo
        System.out.println(subStr2);
    }
}

4、分裂字符串方法


package api.string.demo;

public class splitString {
    //【分裂字符串方法】
    /*
    public String[] split(String regex)按照参数规则,将字符串分裂为若干部分,返回一个字符串数组
    【regex】:正则表达式
     */
    public static void main(String[] args) {
        String str = "aaa,bbb,ccc";
        String[] strArray = str.split(",");
        for (int i = 0; i < strArray.length; i++) {
            System.out.println(strArray[i]);
        }
        String str1 = "aaa.bbb.ccc";
        String[] strArray1 = str1.split(".");
        for (int i = 0; i < strArray1.length; i++) {
            System.out.println(strArray1[i]);
        }
        //【regex】:正则表达式(.)的正则表达式为(//.)
        System.out.println(strArray1.length);
        String[] strArray2 = str1.split("\\.");
        for (int i = 0; i < strArray2.length; i++) {
            System.out.println(strArray2[i]);
        }
    }
}

Q.E.D.


You should think more, Not talk more !