字符串比较
字符串比较有四种常用方法:
(一)比较字符串里的内容,返回布尔型的值
1.public boolean equals(String anObject)(判断时区分字母大小写)
2.public boolean equalsIgnoreCase(String anotherString)(判断时不区分字母大小写)
public class Java {
public static void main(String[] args) {
String stra = "abc";
String strb = "Abc";
System.out.println(stra.equals(strb));
System.out.println(stra.equalsIgnoreCase(strb));//忽略字母大小写
}
}
输出结果:
false
true
(二)比较字符串里的内容,返回整型变量(依次比较两个字符串里的字符的编码并返回两个字符串编码的差值)
1.public int compareTo(String anotherString)(判断时区分字母大小写)
2.public int compareToIgnoreCase(String str)(判断时不区分字母大小写)
public class Java {
public static void main(String[] args) {
String stra = "abc";
String strb = "Abc";
String strc = "abc";
System.out.println(stra.compareTo(strc));//"abc"与"abc"比较
System.out.println(stra.compareTo(strb));//"abc"与"Abc"比较
System.out.println(strb.compareTo(stra));//"Abc"与"abc"比较
System.out.println(stra.compareToIgnoreCase(strb));//"abc"与"Abc"比较,忽略字母大小写
}
输出结果:
0
32
-32
0
(三)第三种方法比较特殊,比较的不是字符串里的内容,而是比较字符串的堆内存地址,返回值也是布尔型
在String上使用“==”进行判断
public class Java {
public static void main(String[] args) {
String stra = "abc";
String strb = "abc";
String STRA = new String("abc");
String STRB = new String("abc");
//两种实例化方法会在下文解释有什么不同
System.out.println(stra == strb);
System.out.println(stra == STRA);
System.out.println(STRA == STRB);
}
}
输出结果:
true
false
false
两种实例化方法的比较
(一)构造方法进行实例化
String STRA = new String("abc");
因为使用了关键字new,所以每次使用都会开辟新的堆内存空间用来存放字符串数据。因为每一个字符串都是String类的匿名对象,所以其首先会开辟一块堆内存空间用来存放字符串,然后又使用关键字new来开辟另一块堆内存空间,再将字符串存放在这块使用关键字new开辟的堆内存空间里,而之前开辟的那块空间就没用了,会等待回收。所以每次使用构造方法,都会开辟两块空间。
比如执行以下代码:
public class Java {
public static void main(String[] args) {
String STRA = new String("abc");
}
}
开辟堆内存空间的过程:
(二)直接赋值进行实例化
String stra = "abc";
第一次直接赋值进行实例化会开辟一块堆内存,并将字符串常量保存在这块空间里;再次进行直接赋值时,如果与上次赋值的字符串是同一串字符串,则会实现对堆内存空间的重用,不会开辟新的堆内存空间。
比如执行以下代码:
public class Java {
public static void main(String[] args) {
String stra = "abc";
String strb = "def";
String strc = "abc";
}
}
开辟堆内存空间的过程:
所以在进行字符串比较时使用“==”,相同的字符串会返回false值。因为使用构造方法实例化同一串字符会存储在不同的堆内存空间中,而这个方法比较的是两个字符串的堆内存地址。
字符串连接的方法
(一)
public String concat(String str)
public class Java {
public static void main(String[] args) {
String stra;
String strb;
String strc = "abc";
String strd;
stra = "abc".concat("def");
strb = "abc".concat("def").concat("ghi");//可以连续调用此方法连接字符串
strd = strc.concat("def");
System.out.println(stra);
System.out.println(strb);
System.out.println(strd);
}
}
输出结果:
abcdef
abcdefghi
abcdef
(二)
使用“+”进行字符串的连接
public class Java {
public static void main(String[] args) {
String stra = "abc";
String strb;
String strc;
String strd;
strb = stra + "***";
strc = "abc" + "***";
strd = "***" + stra;
System.out.println(strb);
System.out.println(strc);
System.out.println(strd);
}
}
输出结果:
abc***
abc***
***abc