String 比较的部分理解(1)
虽然是转载但是很经典.我把自己在学习当中相继弄明白的问题用博文的形式记录下来.作为我对java学习的总结.希望通过这种方式能够更好的提高.
String的比较问题:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
· String是一个系统提供好的类,但是String可以像基本数据类型那样,直接赋值
· String还可以通过new关键字赋值
public class OODemo12{
public static void main(String args[]){
String str1 = "abc" ;
String str2 = new String("abc") ;
String str3 = str2 ;
}
};
|
那么该如何去比较两个字符串是否相等呢?
· 按照“==”的方式进行比较 -- 按地址比较
public class OODemo12{
public static void main(String args[]){
String str1 = "abc" ;
String str2 = new String("abc") ;
String str3 = str2 ;
System.out.println(str1==str2) ; // false
System.out.println(str1==str3) ; // false
System.out.println(str3==str2) ; // true
}
};
|
比较之后发现,虽然str1和str2的内容是一样,但是通过==比较之后,结果均为“false”,而str2和str3的比较结果均为“true”。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
如果使用了“==”,则最终的比较结果是比较的两个地址。
· 最终应该比较的是两个字符串的内容,所以此时,就必须使用String类中提供好的一个方法:
public boolean equals(String str)
public class OODemo13{
public static void main(String args[]){
String str1 = "abc" ;
String str2 = new String("abc") ;
String str3 = str2 ;
System.out.println(str1.equals(str2)) ; // true
System.out.println(str1.equals(str3)) ; // true
System.out.println(str3.equals(str2)) ; // true
}
};
|
使用equals方法比较的是两个字符串的内容。
注意点1:
实际上一个字符串就是String类的匿名对象。
每一个字符串都会在堆内存中开辟空间。
String str1 = "abc" ;
· 首先要在堆内存中开辟一个空间,此空间存放的是“abc”的字符串,之后把此字符串的地址使用给了str1:System.out.println("abc".equals(str2)) ;
注意点2:
String有两种实例化方式
· 直接赋值
· 使用new关键字开辟
以上两种方式使用那种更好呢?
· 直接赋值:它本身只会产生一个实例化对象
public class OODemo14{
public static void main(String args[]){
String str1 = "abc" ;
}
};
|
· 使用new关键字开辟,会产生两个实例化对象
public class OODemo14{
public static void main(String args[]){
String str1 = new String("abc") ;
}
};
|
使用直接赋值的方式比较节约空间,所以绝对不要使用new关键字实例化对象。
注意点3:
· String中的内容一旦声明则不可改变
String的内容是固定的,如果要改变其内容,修改的是其内存的指向。
public class OODemo14{
public static void main(String args[]){
String str1 = "abc" ;
str1 += "bcd" ;
System.out.println(str1) ;
}
};
|
转载于:https://blog.51cto.com/dreamhappy2008/118592