Grails Groovy:两个变量引用同一个对象吗?

Grails Groovy:两个变量引用同一个对象吗?,grails,Grails,我正在为一个网站调试一些Groovy代码,遇到了一个问题,我在流的一部分中的控制器中创建了一个对象a,并在其中设置了一个变量(读回并更正) 然后,我在不同的控制器中提取我对同一对象的理解。但变量不再设置 我认为第一个控制器中的对象A与第二个控制器中拾取的对象A相同的假设是错误的,或者有什么东西在途中修改了值 那么,什么可能是一个非常基本的问题(我有一种可怕的感觉,它指向了我对Groovy/Java如何工作的一些基本误解-所以请温和一些): 如何判断controller 1中的对象A是否与cont

我正在为一个网站调试一些Groovy代码,遇到了一个问题,我在流的一部分中的控制器中创建了一个
对象a
,并在其中设置了一个变量(读回并更正)

然后,我在不同的控制器中提取我对同一对象的理解。但变量不再设置

我认为第一个控制器中的
对象A
与第二个控制器中拾取的
对象A
相同的假设是错误的,或者有什么东西在途中修改了值

那么,什么可能是一个非常基本的问题(我有一种可怕的感觉,它指向了我对Groovy/Java如何工作的一些基本误解-所以请温和一些):
如何判断
controller 1
中的
对象A
是否与controller 2中的
对象A
相同(我的意思是指相同的对象,而不是它们是等效的)。

如果要使某些变量在多个控制器中可用,可以通过以下方式之一进行:

  • 将对象放入
    会话中
  • 将对象置于
    闪光范围内
  • 将对象放在
    流范围中
    ——这里您必须确保您正在访问相同的流
  • 使用
    单例服务
    永久或临时保留该值
  • 在某个地方使用
    静态字段
    (但不得使用)

如果要使某些变量在多个控制器中可用,可以通过以下方式之一实现:

  • 将对象放入
    会话中
  • 将对象置于
    闪光范围内
  • 将对象放在
    流范围中
    ——这里您必须确保您正在访问相同的流
  • 使用
    单例服务
    永久或临时保留该值
  • 在某个地方使用
    静态字段
    (但不得使用)

如果要使某些变量在多个控制器中可用,可以通过以下方式之一实现:

  • 将对象放入
    会话中
  • 将对象置于
    闪光范围内
  • 将对象放在
    流范围中
    ——这里您必须确保您正在访问相同的流
  • 使用
    单例服务
    永久或临时保留该值
  • 在某个地方使用
    静态字段
    (但不得使用)

如果要使某些变量在多个控制器中可用,可以通过以下方式之一实现:

  • 将对象放入
    会话中
  • 将对象置于
    闪光范围内
  • 将对象放在
    流范围中
    ——这里您必须确保您正在访问相同的流
  • 使用
    单例服务
    永久或临时保留该值
  • 在某个地方使用
    静态字段
    (但不得使用)
然后,我拿起我对同一个物体的理解,在一张纸上 不同的控制器

如果您展示一个示例,说明您在第一个控制器中正在做什么,以及您在第二个控制器中正在做什么,这将有助于澄清发生了什么。在上面引用的句子中,你所说的“拾起”是什么意思还不清楚

如果您可以编排事情,使您同时拥有两个引用,那么您可以调用
o1.is(o2)
,它将告诉您
o1
是否指向与
o2
相同的对象。在第一个控制器中,您可以调用
System.identityHashCode(o1)
,在第二个控制器中,您可以调用
System.identityHashCode(o2)
,查看它们是否返回相同的值

在web应用程序中,同一对象的概念有时可能会模棱两可。例如,如果您有两个单独的代理,但它们代理同一实例,则在某些上下文中,您可以将它们视为同一对象。另一个例子是,如果您处理的是持久性实体,那么内存中可能有两个单独的实例,它们实际上对应于数据存储中的同一条记录

无论如何,上面提到的
identityHashCode
方法是一种可以用来知道这些对象是否是同一对象的技术。如果这不适合您,您可以显示一些代码或提供一些可能有帮助的详细信息

然后,我拿起我对同一个物体的理解,在一张纸上 不同的控制器

如果您展示一个示例,说明您在第一个控制器中正在做什么,以及您在第二个控制器中正在做什么,这将有助于澄清发生了什么。在上面引用的句子中,你所说的“拾起”是什么意思还不清楚

如果您可以编排事情,使您同时拥有两个引用,那么您可以调用
o1.is(o2)
,它将告诉您
o1
是否指向与
o2
相同的对象。在第一个控制器中,您可以调用
System.identityHashCode(o1)
,在第二个控制器中,您可以调用
System.identityHashCode(o2)
,查看它们是否返回相同的值

在web应用程序中,同一对象的概念有时可能会模棱两可。例如,如果您有两个单独的代理,但它们代理同一实例,则在某些上下文中,您可以将它们视为同一对象。另一个例子是,如果您处理的是持久性实体,那么内存中可能有两个单独的实例,它们实际上对应于数据存储中的同一条记录

无论如何,上面提到的
identityHashCode
方法是一种可以用来知道这些对象是同一个对象还是同一个对象的技术