定义一个Emperor 类,该类是一个单例类,即该类只有一个对象,定义测试类EmperorTest类,在该类的main方法中创建2个Emperor对象,有“==”运算符比较这个对象,输出比较结果
时间: 2024-10-09 21:13:30 浏览: 35
在Java中,实现单例模式可以通过构造函数的私有化、提供静态工厂方法或者使用双重检查锁定(Double-Checked Locking)等方式。为了满足题目要求,这里我会演示一种简单的单例模式实现,同时包含一个`Emperor`类和一个测试类`EmperorTest`。
首先,我们定义一个名为`Emperor`的单例类:
```java
public class Emperor {
// 使用 volatile 关键字确保线程安全
private static volatile Emperor instance;
// 构造函数为私有,防止外部直接实例化
private Emperor() {}
// 获取唯一实例的方法
public static Emperor getInstance() {
if (instance == null) {
synchronized (Emperor.class) {
if (instance == null) {
instance = new Emperor();
}
}
}
return instance;
}
@Override
public String toString() {
return "Emperor Singleton";
}
}
```
接下来,我们定义一个`EmperorTest`类,用于测试`Emperor`类:
```java
public class EmperorTest {
public static void main(String[] args) {
// 创建两个Emperor对象并比较它们是否指向同一个实例
Emperor emperor1 = Emperor.getInstance();
Emperor emperor2 = Emperor.getInstance();
System.out.println("emperor1 == emperor2: " + (emperor1 == emperor2)); // 输出 true,因为它们引用的是同一个对象
// 如果你想确保每次运行都会创建新的对象,可以移除getInstance方法中的同步块
// emperor1 = Emperor.new Emperor(); // 这会导致每次都创建新的对象,输出 false
}
}
```
在这个例子中,`==`运算符用来比较两个`Emperor`对象是否指向相同的内存地址。由于单例模式保证了整个应用中只有一个`Emperor`对象,所以`emperor1`和`emperor2`实际上是同一个对象,因此`emperor1 == emperor2`的结果为`true`。