Java 参数是通过引用而不是值传递的
我正在使用AsyncTask从网站上获取信息,用于我正在进行的一个小型学习项目。我已经试过我的代码,它“尝试”去做我想做的事情,尽管我有一个小问题 我将传递一个字符串作为要在AsyncTask中执行的参数,但该参数由地址而不是值引用。这是为什么?我如何在UI线程和后台线程之间正确地传递参数 这是传递参数的代码:Java 参数是通过引用而不是值传递的,java,android,parameters,Java,Android,Parameters,我正在使用AsyncTask从网站上获取信息,用于我正在进行的一个小型学习项目。我已经试过我的代码,它“尝试”去做我想做的事情,尽管我有一个小问题 我将传递一个字符串作为要在AsyncTask中执行的参数,但该参数由地址而不是值引用。这是为什么?我如何在UI线程和后台线程之间正确地传递参数 这是传递参数的代码: ibSearch.setOnClickListener(new View.OnClickListener() { public void onClick(View v)
ibSearch.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Editable artnrInput = input.getText();
String artnr = artnrInput.toString();
new Connection().execute(artnr);
}
});
到目前为止,我已经对它进行了调试,参数“artnr”在这里是一个值
这是发生错误的异步任务的一部分:
public class Connection extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... artnr) {
String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr="+ artnr + "&lan=01";
我尝试了一个简单的toString(),但更多的是猜测。为什么它不是作为值传递,而是作为引用传递
谢谢,,
Z您应该使用
artnr[0]
(这是您正在传递的唯一参数),而不是artnr
(因为String…artnr
是字符串对象的数组,而不是单个字符串对象):
除此之外,请参见您应该使用
artnr[0]
(这是您正在传递的唯一参数),而不是artnr
(因为String…artnr
是字符串对象的数组,而不是单个字符串对象):
除此之外,请参见
String。。。artnr
是一个var args
,实际上只是一个数组。打印artnr
时,您正在打印数组引用的值
您需要更改url
字符串以打印artnr[0]
,而不是artnr
以打印字符串:-
String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr=" +
artnr[0] + "&lan=01";
字符串。。。artnr
是一个var args
,实际上只是一个数组。打印artnr
时,您正在打印数组引用的值
您需要更改url
字符串以打印artnr[0]
,而不是artnr
以打印字符串:-
String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr=" +
artnr[0] + "&lan=01";
对字符串的引用是通过值传递的。Java中根本不传递对象,更不用说通过值或引用。对字符串的引用是通过值传递的。Java中根本不传递对象,更不用说通过值或引用了。@Zyril。知道Java按值传递一切是很有用的。当谈论对象时,“引用”是一个不好的词,因为它们是更准确的指针。“传递”给方法的对象(无法完成)实际上传递的是指针的值。该值是实际指针的副本,通过将对象“传递”到Java方法,然后尝试更改该对象,可以很容易地演示该值。可以修改其属性,但不能更改对象。编辑我刚刚发现了英文答案中的链接,这是一个很好的解释。@Simon。。呼吸,人呼吸。其实你是对的。编辑答案:)不用担心事实上我是在打电话给Zyril,我认为这不是对你答案的评论。我比和一个15.6K;)纠缠更聪明@西蒙。。哈哈:)不,这并不是说你不能和15.6K纠缠在一起。当然,人们并不是根据他们的代表来判断的。每个人都可能是错的。事实上,你的评论一点也没有冒犯我。所以不用担心。干杯:)@Zyril。知道Java按值传递一切是很有用的。当谈论对象时,“引用”是一个不好的词,因为它们是更准确的指针。“传递”给方法的对象(无法完成)实际上传递的是指针的值。该值是实际指针的副本,通过将对象“传递”到Java方法,然后尝试更改该对象,可以很容易地演示该值。可以修改其属性,但不能更改对象。编辑我刚刚发现了英文答案中的链接,这是一个很好的解释。@Simon。。呼吸,人呼吸。其实你是对的。编辑答案:)不用担心事实上我是在打电话给Zyril,我认为这不是对你答案的评论。我比和一个15.6K;)纠缠更聪明@西蒙。。哈哈:)不,这并不是说你不能和15.6K纠缠在一起。当然,人们并不是根据他们的代表来判断的。每个人都可能是错的。事实上,你的评论一点也没有冒犯我。所以不用担心。干杯:)
String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr=" +
artnr[0] + "&lan=01";