两条:
1。Java is by Reference
2。function的参数作用域在该函数体类String display = "nihao"; // display refered to String "nihao"
setString(display); //参数 str 得到 String "nihao" 的 reference
//dispaly referred to "nihao", 没变
函数体内:
{
str = "Hello!"; //str 指向 “Hello"; dispaly 仍然 指向 "nihao"
}
函数体外:
System.out.println(display); //dispaly 仍然 指向 "nihao";result2 is "nihao"
1。Java is by Reference
2。function的参数作用域在该函数体类String display = "nihao"; // display refered to String "nihao"
setString(display); //参数 str 得到 String "nihao" 的 reference
//dispaly referred to "nihao", 没变
函数体内:
{
str = "Hello!"; //str 指向 “Hello"; dispaly 仍然 指向 "nihao"
}
函数体外:
System.out.println(display); //dispaly 仍然 指向 "nihao";result2 is "nihao"
你又没有改变dispaly的值?
Public void setString(String str){
str = "Helle!";
}
// 现有如下的语句
String display = "nihao";
System.out.println(display); // result1 is "nihao"
setString(display);
System.out.println(display); // result2 is "nihao"在你上面的操作中,当你调用setString(display);编译器回吧display所指向的那个字符串的地址取出来,传递给函数。注意,字符串的地址并不等于display,这里,其实还是相当于传递了一个值,只不过这个值是字符串的地址。然后你在函数里面给这个地址值重新定向,对于display变量来说,肯定不会起作用阿。其实你可以这么理解,当你这么定义的时候,int a,那么变量a里面存放的是整数,当你String a的时候,变量a里面存放的并不是字符串,而是字符串的地址。
{
public static void main(String [] args)
{ String display = "nihao";
Datapassing a = new Datapassing();
void setString(){
display = "Hello!";
}
System.out.println(display);
a.setString();
System.out.println(display); }
}
我这样写为什么编译还是不过
请高手指教!
class Datapassing
{ String display = "nihao";
void setString(){
display = "Hello!";
}
void print(){
System.out.println(display);
}
public static void main(String [] args)
{
Datapassing a = new Datapassing();
a.print();
a.setString();
a.print();
}
}
高手门我这样做对吗?
需display是一个指向字符串变量的地址的变更。
在子程序中只是将新的参数变量str的指向了一个新的字符串,但是该值是不会返回给display的。
如果我想得到的结果是display="Hello!",那么除了用返回值以外(该种方法不好,如果返回2个参数的话会比较麻烦的),还有什么办法能解决这个问题呢?谢谢帮忙。
display = "Hello!";
}
是一个函数调用,当然在那不能编译过了
Java采用的是不是值传递,是传引用,这是一个很基础的问题
CSDN这么多人怎么连这都不知道楼主的程序帮您解释一下
Public void setString(String str){
//相当于str = new String("Helle"); (其实是有区别的,不过在这里可以认为是相同的)
str = "Helle!";
}这里new 了一个对象,所以呢...
String 是不变模式实现的,所以,需要用别的对象来测试传引用
JAVA中仅有几个对象是传值的,而您恰恰就选择了这个String(哈哈,当初我也是)可以改为任何一个对象,除了String等少数几个Object,几乎都可以
Public void setString(StringBuffer str){
str.append("Helle!");
//如果 str = new StringBuffer("sdfsdf");当然不行
}
Public void setString(Vector str){
str.add(""sdfsd");
//如果 str = new Vector();当然不行
}