java - 如果我将一个对象的实例传递给另一个类,它仍然被认为是该对象的同一个实例吗?

标签 java instance synchronized

我想知道 ClassOneClassTwoc3 的值是否被认为是该对象的同一个实例。我计划在单独的线程中从两个类调用 ClassThreecheck() 方法,并想知道它们是否会相互干扰。

 public class ClassOne{
    private ClassThree c3 = new ClassThree();
    public ClassOne(){}

    public void passThreeToTwo{
       ClassTwo.setC3(c3);
    }
 }
//------------------------------------------------------*

 public class ClassTwo{
    private static ClassThree c3 = null;
    public ClassTwo(){}

    public static void setC3(ClassThree c3){
       this.c3 = c3;
    }
 }
//------------------------------------------------------*

 public class ClassThree{
    public ClassThree(){}
    public synchronized check(){}
 }

 public static void main(String[] args){
    ClassOne c1 = new ClassOne();
    C1.passThreeToTwo();
 }

希望这是一个可以理解的例子和问题?

最佳答案

是的。当您这样做时:

public static void setC3(ClassThree c3)

您没有传递 ClassThree 的副本 - 您传递的是对原始 c3 的引用。您通过引用传递对象(与被复制的基元相反)。

您可以通过执行引用相等性检查来检查这一点,例如

if (c3 == myOriginalC3) {
   // it's the same
}

因为这是单独比较对象引用。

关于java - 如果我将一个对象的实例传递给另一个类,它仍然被认为是该对象的同一个实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26720670/

相关文章:

java - 通过DER算法解码Java中的证书

java - 如何以编程方式(java)更新keycloak的用户详细信息,而不使用rest admin api?

objective-c - Objective-C 中的实例数组

java - 接口(interface)java中的实例初始化器

java - 同步块(synchronized block)显示奇怪的结果

java - 保留嵌套同步块(synchronized block)中的锁顺序

java - 在 Java 中使用大型内部类不好吗?

Java StringTemplate 迭代复杂对象列表

c# - c#中应用程序的单个实例

java - 在两个线程和主程序之间共享一个对象