public class test4 {
public static void changeStr(String str){
        str="welcome";
    }
    public static void main(String[] args) {
        String str="1234";
        changeStr(str);
        System.out.println(str);
    }
}
结果是1234,为什么不是welcome

解决方案 »

  1.   

    changeStr(str); 改成str = changeStr(str); 并且吧changeStr的返回类型改成String 加上一句return就是你要的welcome了从另一个角度来说,changeStr这个方法里的str只是个形式参数 你可以把str换成另一个符号 比如s  这个s在方法changeStr执行完了之后 就不存在了 所以你的main方法里changeStr(str)没有对真正的str变量起到任何作用
      

  2.   

    java的一个特点
    public static void changeStr(String str){ 
            str="welcome"; 
        } 
    后只是改变了它的形参的值,没有改变String str="1234"; 
    解决方法如一楼
      

  3.   

    正如一楼所说,你没改变到str的值,那样改就行了。
      

  4.   

    public class test4 {
    public static String changeStr(String str) {
    return str = "welcome";
    } public static void main(String[] args) {
    String str = "1234";
    changeStr(str);
    System.out.println(str);
    }}你的意思是这个结果是什么 ??????
      

  5.   

    楼上果然是菜鸟
    public class test4 { 
    public static String changeStr(String str) { 
    return str = "welcome"; 
    } public static void main(String[] args) { 
    String str = "1234"; 
    str = changeStr(str); 
    System.out.println(str); 

    1楼的意思是这个
      

  6.   

    应该是
    public class test4 { 
    public static String changeStr(String str) { 
    return str = "welcome"; 
    } public static void main(String[] args) { 
    String str = "1234"; 
    str=changeStr(str); 
    System.out.println(str); 
    } }
      

  7.   

    JAVA所有methold都是传值调用。public class test4 {
        public static void changeStr(String a){
            a="welcome";
        }
        public static void main(String[] args) {
            String str="1234";
            changeStr(str);
            System.out.println(str);
        }
    } changeStr(str)是先把str的值(也就是指向“1234”的指针)作一份拷贝,a="welcome"修改的是这份拷贝,根本没有改变str的值。
    参看《CORE JAVA 2》第四章"Method Parameters"的内容吧,说明很详细。
      

  8.   

    java 方法传递的是该对象的引用
      

  9.   

    str="welcome"; 是changeStr()的局部变量,并不是你传入的那个参数,方法changeStr()结束后str="welcome"就进垃圾处理器了,而你传入的参数不变。
      

  10.   

    别说人家了,你看你自己写的东西! bad code style
      

  11.   

    public class test4 { 
    public static String changeStr(String str) { 
       return str = "welcome"; 
     } public static void main(String[] args) { 
             String str = "1234"; 
             str=changeStr(str); 
            System.out.println(str); 
    } }
      

  12.   

    public class test4 { 
    public static void changeStr(String str1){ 
            str1="welcome"; 
        } 
        public static void main(String[] args) { 
            String str="1234"; 
            changeStr(str); 
            System.out.println(str); 
        } 
    }
    LZ 将自己程序改成这样,
    首先在常量池开辟一空间,里面放上1234
    调用changeStr()方法,在将1234传过去,
    此时 再在栈区开避一另空间str1,str1的值为传过来的1234
    经过str1="welcome"; 将str1改成"welcome"
    但实际上str的值没有改  这是所谓的<传值调用>
      

  13.   

    因为String str="1234"; 是main方法中的局部变量
    str="welcome"; 是changeStr中的局部变量
    两个相互不影响
    java中没有不能传地址  只有值传递
      

  14.   

    public static void changeStr(String str){ 
            str="welcome"; 
        } 
    此方法中的str是一个局部变量 只是传值作用。 
     
      

  15.   

    结果确实是:1234,因为你在main函数中也定义了一个str变量,当你执行:System.out.println(str);时,这条语句里的str其实是你在main函数中定义str变量。所以显示:1234
      

  16.   

    String可以说成是一个特殊的原子类型
      

  17.   

    改法一:
    public class test4 { 
    public static String changeStr(String str){ 
            str="welcome"; 
            return str;
        } 
        public static void main(String[] args) { 
            String str="1234"; 
            str = changeStr(str); 
            System.out.println(str); 
        } 
      

  18.   

    基础类型都是这样,给他赋新的值,他就指向新的那个"welcome"而不是吧原来的那个值改成"welcome"
      

  19.   

    我是这样理解的,你用changeStr(str); 只是用str新开辟了一个堆内存,可是这样做并没有改变以前的那个堆内存中的数据,所以这样做没起到作用!所以就要用到str=changeStr(str).
      

  20.   

    String是引用类型的。改变的是地址,不是值。
      

  21.   

    三位一体加业务知识(java,数据库、应用服务器+业务),才是java学习的正道,
    http://javadbserver.ucoz.com/
    http://javadbserver.free.mingyao.net
      

  22.   

    String str="1234"; 
    把他声明称静态的全局变量呢  这样的话就是引用同一块地址空间了
    我感觉也可以输出welcome   
      

  23.   

    如果有空可以试试
    public class test4 { 
    public static void changeStr(String str){ 
            str="welcome"; 
        } 
        public static void main(String[] args) { 
            String str="1234"; 
            System.out.println(changeStr(str)); 
        } 
      

  24.   

    调用changeStr()的时候 只是把当前的引用str 赋给了 形参str 也就是说他俩保存的是一样的地址changeStr函数里 又把形参str 的地址指向了其他地方 但是 主函数里的 str 地址还是保持没变的呀 
    还是指向原来的 1234 
      

  25.   

    当然是1234呀///////////
    public class test4 { 
    public static void changeStr(String str){ 
            str="welcome"; 
        } 
        public static void main(String[] args) { 
            String str="1234"; 
            changeStr(str); 
            System.out.println(str); 
        } 

    其实函数  changeStr(str); 
    没有改变变量str的值呀