自己的总结
/*
equals 和 == 的区别
equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。也可以理解是比较字符串是否相等。
==用于比较引用(就是比较的内存地址的值是否相等)和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true
*/
public class TSt{
public static void main(String[] args){ String s1=new String("jack");//开辟了2个空间,因为"jack"字符串开辟一个,new又开辟一个空间(这里的值是引用"jack"开辟空间里面的值),由new开辟的空间返回
String s2=new String("jack");//同理2个
String s3=s1;
String s4="jack";//开辟了一个空间
String s5="jack";//同理一个
//true
System.out.println(s1.equals(s2));//为true,因为equals比较的是对象的内容 //false
System.out.println(s1==s2); //为false,因为==比较的是在堆里面的位置,因为开辟了4个空间,所以为false。 //true
System.out.println(s1==s3);//为true,因为s1开辟的空间也把线引向了s3,所以用的都是s1开辟的空间,结果为true。 //true
System.out.println(s1.equals(s3)); //只要s1==s3相等,那么s1.equals(s3)必然相等。 //true
System.out.println(s4.equals(s5));//因为String也是个类,所以s4,s5都开辟了新的空间(这样理解是不对的,这里用到了java的一种设计模式,叫做共享模式,
只要s4开辟了空间,s5就会享用s4开辟的空间),既然都用一个空间了,所以答案为true。
//true
System.out.println(s4==s5);//解释同上。 //true
System.out.println(s1.equals(s4));//s1与s4的内容都是jack,所以答案为true。 //false
System.out.println(s1==s4);//这里s1开辟的两个空间是不会分给一个给s4共享的,所以答案为false。
} }
*************************************************************************************下面是String类的一些特性
1、String类中的内容一旦声明则不可改变例子如下:
public clss Test{
public static void main(String[] args){
String s1="jack";
fun(s1)
System.out.println(s1); //答案为jack
}
public static void fun(String s2){
s2="lucy";
}
}