第一次在Java中感受到指针
可能很多人认为我大惊小怪,可是确实比较激动。
于是发上来分享。
这是我感受到指针的代码。
我把参数中organizationIds这个list赋值给了orgList
我的原意是想把organizationIds的值给orgList
然后后面用orgList去进行操作。
可是我发现。我这样的做法。导致我的程序变成了死循环。
从逻辑代码没看出有什么问题。
于是使用断点功能去追查。
最后发现。每次当我orgList进行add的时候
organizationIds的值也会一起变化。
这是什么情况?以前没遇到过啊。以为是代码没有编译
于是费了很大的力气进行编译……
编译的结果。还是跟之前一样。代码反复的查验。。无果。。
忽然反映过来。 难道是指针???
我的orgList没有进行一次 new操作。所以没有给他开辟一个内存空间。
当把organizationIds赋值给orgList的时候。
只是把orgList的指针指向了organizationIds的内存地址????
于是把代码改为如下:
果然这一次没有问题了。并且orgLIst的值完全正确……
其实Java也是一样。还是有指针的嘛…………
可能很多人认为我大惊小怪,可是确实比较激动。
于是发上来分享。
这是我感受到指针的代码。
public List search( List<String> organizationIds) throws Exception {
try {
begin();
List<String> orgList = organizationIds;
for (int i = 0; i < organizationIds.size(); i++) {
List<String> list = DAO.get(organizationIds.get(i));
for (String str:list) {
orgList.add(str);
}
}
commit();
return usersDatas;
} catch (Exception e) {
rollback();
log.error(e.getMessage(), e);
throw e;
}
}
我把参数中organizationIds这个list赋值给了orgList
我的原意是想把organizationIds的值给orgList
然后后面用orgList去进行操作。
可是我发现。我这样的做法。导致我的程序变成了死循环。
从逻辑代码没看出有什么问题。
于是使用断点功能去追查。
最后发现。每次当我orgList进行add的时候
organizationIds的值也会一起变化。
这是什么情况?以前没遇到过啊。以为是代码没有编译
于是费了很大的力气进行编译……
编译的结果。还是跟之前一样。代码反复的查验。。无果。。
忽然反映过来。 难道是指针???
我的orgList没有进行一次 new操作。所以没有给他开辟一个内存空间。
当把organizationIds赋值给orgList的时候。
只是把orgList的指针指向了organizationIds的内存地址????
于是把代码改为如下:
public List search( List<String> organizationIds) throws Exception {
try {
begin();
List<String> orgList = new ArrayList<String>();
for (int i = 0; i < organizationIds.size(); i++) {
orgList.add(organizationIds.get(i));
List<String> list = DAO.get(organizationIds.get(i));
for (String str:list) {
orgList.add(str);
}
}
commit();
return usersDatas;
} catch (Exception e) {
rollback();
log.error(e.getMessage(), e);
throw e;
}
}
果然这一次没有问题了。并且orgLIst的值完全正确……
其实Java也是一样。还是有指针的嘛…………