我正在尝试将对象从活动传递到另一个活动。这是我做的:
MyApplication.db= dbToOpen;
Intent i = new Intent(mContext, OpenDbActivity.class);
i.putExtra("PARENT_GROUP", dbToOpen.root);
mContext.startActivity(i);
此处, MyApplication 是扩展应用程序的类, db 对象是静态对象。我的额外对象 dbToOpen.root 是 DBGroupv1 类的对象。
然后我在OpenDbActivity类的onCreate方法中得到了额外的东西:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_opendb);
db = MyApplication.db;
groupToOpen = (DBGroupv1) getIntent().getSerializableExtra("PARENT_GROUP");
}
然后我尝试这个布尔表达式:
MyApplication.db.root == groupToOpen
并返回false。当我查看对象dbToOpen.root和groupToOpen时,这些对象中的每个变量值都是相同的。但它们是不同的对象。为什么会这样?是因为强制转换,还是Intent.putextra()方法传递了一个对象的副本,而不是一个引用?如果是这种情况我怎么能将对象作为参考传递?(除了使用静态变量)
由于
答案 0 :(得分:1)
您应该使用.equals()
- 方法来比较对象的实例。如果使用==
,只有两个对象完全相同的引用才会生效。由于意图中的实例是在从包中反序列化时新创建的,因此它不再是对同一实例的引用(尽管这两个对象包含相同的数据)。
所以,而不是
MyApplication.db.root == groupToOpen //bad
使用
MyApplication.db.root.equals(groupToOpen) //good
另外请确保如果您创建了root
- 对象,则可以正确实现equals
方法,因此需要考虑所有适当的变量。
您可以在此处阅读更多内容:What is the difference between == vs equals() in Java?