📜  如何在Java中初始化和比较字符串

📅  最后修改于: 2020-03-27 01:27:49             🧑  作者: Mango

用Java初始化字符串

1. Direct Initialization(String Constant):在此方法中,将在内存池区域内的String池区中创建一个String常量对象。因为它是一个常量,所以我们不能修改它,即String类是不可变的
例子:

String str = "芒果For芒果";
str = "芒果"; // 本句声明会让str指向新的String常量"芒果",而不是去修改原来的常量

字符串str =“ 芒果For芒果”;


注意:如果我们再次将str =“ 芒果For芒果”写为下一行,则它首先检查给定的String常量是否存在于String池区中。如果存在,则str指向它,否则创建一个新的String常量。
2.对象初始化(动态):在此方法中,将在堆区域(而不是大写的String池区域内)中创建String对象。我们可以对其进行修改,也可以使用相同的值在String池区中创建一个String常量,但该变量将仅指向堆区中的String对象。
例子: 

String str = new String("very");
str = "good";

字符串str =新字符串(“very”)

str = “good”
现在这是一个直接分配,因此在String池区域中创建了值为“ good”的String常量,并且str指向该常量。

注意:如果再次编写str = new String(“very”),它将创建一个值为“very”的新对象,而不是指向堆中具有相同值的可用对象。但是如果编写str =”very”,则它将指向String合并区域中存在的值为“very”的String常量对象。

比较字符串及其引用

1. equals()方法:比较字符串的是否相等。返回类型为布尔值。在几乎所有情况下,您都可以使useObjects.equals()。
2. ==运算符:它比较引用而不是值,返回类型为布尔值。==用于少数情况下,即您知道要处理内部字符串。
3. compareTo()方法:按字典顺序比较值,并返回一个整数值,该值描述第一个字符串是否小于、等于或大于第二个字符串。例如,如果str1和str2是两个字符串变量,则如果
str1 == str2:返回0
str1> str2:返回正值
str1 返回负值
注意:compareTo方法返回的正值和负值是两个字符串中第一个不匹配字符的差。

// Java如何比较两个Strings
public class Test {
    public static void main(String[] args)
    {
        String s1 = "Ram";
        String s2 = "Ram";
        String s3 = new String("Ram");
        String s4 = new String("Ram");
        String s5 = "Shyam";
        String nulls1 = null;
        String nulls2 = null;
        System.out.println("使用equals:");
        System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
        System.out.println(s1.equals(s5));
        // System.out.println(nulls1.equals(nulls2));  // NullPointerException
        System.out.println("使用 ==:");
        System.out.println(s1 == s2);
        System.out.println(s1 == s3);
        System.out.println(s3 == s4);
        System.out.println(nulls1 == nulls2);
        System.out.println("使用compareto:");
        System.out.println(s1.compareTo(s3));
        System.out.println(s1.compareTo(s5));
        // System.out.println(nulls1.compareTo(nulls2));  // NullPointerException
    }
}

输出:

使用equals:
true
true
false
使用 ==:
true
false
false
true
使用compareto:
-1