栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

面试——Java基础

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面试——Java基础

JDK 和 JRE 有什么区别?

Java Development Kit(JDK)—— Java 开发工具包
Java Runtime Environment(JRE)—— Java 运行环境
javac —— Java 源码编译器

  • JDK:提供了 Java 开发环境和运行环境。
  • JRE:提供了 Java 运行的环境

JDK 其实包含了 JRE ,以及 javac、Java 程序调试和分析工具。
只需运行 Java 程序 JRE 就够了,若要编写 Java 程序就需要 JRK。

equals 和 == 的区别是什么?

对于基本类型和引用类型 == 的作用效果是不一样的。

  • 基本类型:比较值是否相同
  • 引用类型:比较引用是否相同
String x = "String";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

因为 x,y 指向同一个引用,因此 == 为 true,但 new String() 方法则重写并开辟了内存空间,因此 == 为 false;而 equals 一直是比较值,所以为 true。

equals 本质上是 ==,像是String 和Integer 等是重写了 equals 方法的,将它变成了值得比较。

class Cat {
	private String name;
	public Cat(String name) { this.name = name; }
	public void setName(String name) { this.name = name; ]
}

String e = new String("GG");
String d = new String("GG");
System.out.println(e.equals(d)); // true

Cat c1 = new Cat("MM");
Cat c2 = new Cat("MM");
System.out.println(c1.equals(c2)); // false

为什么前者是 true 而后者是 false?怎么回事?去看一下 equals 源码。

public boolean equals(Object obj) { return (this == obj); }

这证实了前面说的 equals 本质上是 ==,那为何会出现上面的情况?去 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) {
			char v1[] = value;
			char v2[] = anotherString.value;
			int i = 0;
			while(n-- != 0) {
				if(v1[i] != v2)
					return false;
				i++;
			}
			return true;
		}
	}
	return false;
}

原来是 String 重写了 Object 的 equals()方法,将引用比较改成了值比较。

也就是说==对于基本类型是值比较,对于引用类型是引用比较;
equals默认是引用比较,但许多类将 equals()方法重写了,将它变成了值的比较,因此一般情况下equals是值的比较。

其实还有数值的比较,先去搜看一下,后续更新。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/922377.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号