1.JVM, JRE和JDK的区别
JVM (Java Virtual Machine):Java 虚拟机。他能够识别.class文件,这类文件可以在Java虚拟机上运行,JAVA虚拟机通过与操作系统进行交互,然后将该程序翻译成指令的形式调用操作系统的命令。
JRE(Java Runtime Environment):Java 程序运行环境。包含了JAVA虚拟机和JAVA的基础类库。
JDK (Java Development Kit):Java 开发工具包。JAVA语言编写的程序所需要的开发工具包,JDK包含了JRE,同时还包括JAVA源码的编译器JAVAC,监控工具jconsole,分析工具jvisualvm等。
2.==和equal()的区别
-
==是运算符,equal()是方法,结果都返回布尔集
-
Object的==和equals()比较的都是地址,作用相同。
Object类中定义的equals()方法如下:
public boolean equals(Object obj)
{
return this == obj;
}
我们不难发现object类中是通过“”运算符来定义equals()方法的,而java每一个类都继承object类,所以每个类都有equals()方法。所以在没有覆盖equals()方法的前提下,“” 来定义equals()方法比较的结果是一样的。相比“==”运算符,equals()方法的特殊之处是可以重写。
例如:我们定义一个emp类,类中定义一个字段name 然后重写equals()方法和hashCode() 方法,
package dtt.com.temp;
public class emp {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
emp other = (emp) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
最后调用比较“==”运算符和equals()方法的区别
package dtt.com.temp;
import dtt.com.temp.emp;
public class test {
public static void main(String[] args) {
emp e1 = new emp();
emp e2 = new emp();
e1.setName("Good good study, day day up");
e2.setName("Good good study, day day up");
boolean boo1 = e1.equals(e2);
boolean boo2 = e1 == e2;
System.out.println("boo1::"+boo1);
System.out.println("boo2::"+boo2);
}
}
输出结果:
boo1::true
boo2::false
通过输出结果,我们可以知道此时“”运算符和equals()方法比较的内容也不同,由于重写equals()方法所以此时它比较的还是对象内容,而“”运算符则不是,它比较的是对象内容所对应的地址。