1、用于基本数据类型的比较
用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同,返回值为布尔类型
String类型比较不同对象内容是否相同,应该用equals,因为==用于比较引用类型和比较基本数据类型时具有不同的功能。
String作为一个对象来使用
String s1 = new String(“java”);
String s2 = new String(“java”);
System.out.println(s1==s2); //false
System.out.println(s1.equals(s2)); //true
String s1 = new String(“java”);
String s2 = s1;
System.out.println(s1==s2); //true
System.out.println(s1.equals(s2)); //true
String作为一个基本类型来使用
如果值不相同,对象就不相同,所以"==" 和equals结果一样
String s1 = “java”;
String s2 = “java”;
System.out.println(s1==s2); //true
System.out.println(s1.equals(s2)); //true
如果String缓冲池内不存在与其指定值相同的String对象,那么此时虚拟机将为此创建新的String对象,并存放在String缓冲池内。
如果String缓冲池内存在与其指定值相同的String对象,那么此时虚拟机将不为此创建新的String对象,而直接返回已存在的String对象的引用。
①在函数中定义的一些基本类型的变量和对象的引用变量(变量名)都在函数的栈内存中分配。
②当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
③堆内存用来存放由new创建的对象(包括由基本类型包装起来的类:Integer、String、Double,实际上每个基本类型都有他的包装类)和数组。
二)Object类中的equals方法:
public boolean equals(Object obj) {
return (this == obj);
}
三)String类很特殊 ,String类对equals方法进行了重写,如下:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {undefined
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {undefined
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
四)开始具体分析:
int num1 = 10;
int num2 = 10;
System.out.println(num1 == num2); //true
//num1 和num2都是int型 它们的值都是10,因此使用”==”当然相等.
String s1 = "hello";
String s2 = "hello";
System.out.println(s1 == s2); // true
System.out.println(s1.equals(s2)); // true
接着System.out.println(s1.equals(s2));这里的equals在String类中被重写过,用来比较两个字符串的实际内容是否相等,即每一个字符是否相等,重写方法末尾会另做说明!!!因为比较的是字符串内容,s1,s2内容都是hello当然是相等的。
String ss1 = "aaa";
String ss2 = new String("aaa");
System.out.println(ss1 == ss2); //false
System.out.println(ss1.equals(ss2)); // true
String sss1 = new String("aaa");
String sss2 = new String("aaa");
System.out.println(sss1 == sss2); //false
System.out.println(sss1.equals(sss2)); // true
StringBuffer stringBuffer = new StringBuffer("aaa");
StringBuffer stringBuffer2 = new StringBuffer("aaa");
System.out.println(stringBuffer == stringBuffer2); // false
System.out.println(stringBuffer.equals(stringBuffer2)); // false