提问人:kshamajain99 提问时间:7/2/2014 更新时间:7/2/2014 访问量:128
我可以在 java 中通过引用传递值吗
Can i pass value by reference in java
问:
代码片段
public void parsequery()
{
ParseQuery<ParseObject> query = ParseQuery.getQuery("Products");
query.whereEqualTo("StoreID", StoreID);
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> objects, ParseException e) {
if (e == null) {
for(int j=0; j<array.size();j++){
ParseQuery<ParseObject> query1 = ParseQuery.getQuery("Products");
c = array.get(j);
Log.d("C",""+c);
query1.whereEqualTo("SubCategory", c);
query1.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> objects1, ParseException e) {
if (e == null) {
productList.clear();
Log.d("Inner LOOP",""+objects1.size());
for(int i=0; i<objects1.size();i++)
{
SingleRow temp1 = new SingleRow(objects1.get(i).getString("Name"),objects1.get(i).getString("Description"),objects1.get(i).getInt("Price"),objects1.get(i).getString("Store"),objects1.get(i).getObjectId(),1);
productList.add(temp1);
}
productList temp11 = new productList(productList);
productList1.add(temp11);
}else{
Log.d("score", "Error: " + e.getMessage());
}
}
});
}
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
for(int k =0; k<array.size();k++){
Log.d("ProductList22",""+productList1.get(k).getProductList());
ArrayList<SingleRow> temp2 = productList1.get(k).getProductList();
SubcategorySinglerow temp = new SubcategorySinglerow(array.get(k),temp2);
categoryList.add(temp);
bool=true;
}
myList.addHeaderView(header, null, false);
Log.d("categoryListAdapter", ""+categoryList);
listAdapter = new MyListAdapter(getActivity(), categoryList);
myList.setAdapter(listAdapter);
layout.setVisibility(View.GONE);
myList.setVisibility(View.VISIBLE);
}
}, 5000);
} else {
Log.d("score", "Error: " + e.getMessage());
}
}
});
}
在这里我传递值 productList1.get(k).getProductList();通过 productList 到 subcategorysinglerow 类,我在每次执行 for 循环后都会清除它,因为我需要向它添加新值。因此,它最终为类 productList 中的每个 productList1 传递 productList 的值,因为 java 是按值传递的。有没有办法在java中通过引用传递值。我该如何解决我的问题。
答:
-1赞
Gabe Sechan
7/2/2014
#1
Java 不是按值传递的,不是真的。Java 中类的所有变量都是引用。将它们视为 C++ 指针(它们通常是指针,但现在这是不必要的细节)。因此,您正在按值传递指针,这与传递按引用指向的值相同。如果更改引用中的值,则该值将全局更改。唯一的例外是基本数据类型 - int、boolean、double 等,因为它们不是引用。
现在有一些类是不可变的 - 没有函数可以更改其内部值。对于这些,您可以通过传递一个数据结构来轻松绕过它,该数据结构将您想要的实际数据作为实例变量。
评论
0赞
kshamajain99
7/2/2014
我通过清除变量在每个 for 循环后设置变量中的值。有没有其他方法可以传递值,以便我为每个 productlist1 传递特定值。
0赞
Gabe Sechan
7/2/2014
你在 Java 中看到的所有变量,比如 MycLass foo;它们都是引用。不是对象。
0赞
Scary Wombat
7/2/2014
对对象的引用
1赞
newacct
7/3/2014
“Java 不是按价值传递的,不是真的。”Java 完全是按值传递的。
0赞
Alexander
7/2/2014
#2
也许,你可以使你的变量成为类的成员。
或者你可以做
class MyValue {
public int val;
}
MyValue v = new MyValue();
v.val = 1;
// In other class
void modify(MyValue v) {
v.val = 2;
}
评论
Pass-By-Value