请教大家个问题啊
java中
int 是值类型
String 是引用类型
先在main入口中分别给它们赋值
在调用方法时,把他们分别作为参数传进去,并在方法中把它们的值改变
再在main中输入两个参数
结果应该是String类型的参数值不改变,int类型的值变化。
可是
为什么两个值都不变呢?
pubic class Test(){
public Test(){}static print(int a,String b){
a=456;
b="def";
}
   public void static main(String[] args){
      int a=123;
      String b="abc";
      Test test=new Test();
      print(a,b);
      System.out.println(a);
      System.out.println(b);
   }
}输出结果不应该是:456  abc 么?
怎么还是123,abc呢····
迷茫了!

解决方案 »

  1.   

    我是回忆着写的
    刚才我从写了一个
    public class te {
    public te(){}
    static void print(int a,String b){

    a=456;
    b="def";
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    int a=123;
    String b="abc";
    te t=new te();
    t.print(a, b);
    System.out.println(a);
    System.out.println(b);
    }
    }还是我说的问题
      

  2.   

    楼主还没有明白java中的参数传递
     首先 a 是简单数据类型,所以它是属于值传递,值传递到方法中是给方法去用的,你把他变成什么样都不管我的事,
     但是B 是引用传递,你会问,引用传递为什么值还是没变呢。 那是因为 你main中的b 和 print方法中的b同样指向一个对象,但是在print方法中的b指向了"def" 对象 这样main指向的还是 “abc” 所以值没变  下面我给你写一个列子 
    public class A{
      public static void main(String []args){
        StringBuffer buff = new StringBuffer("aaaa");
        print(buff);
     }  public void print(StringBuffer buff){
         buff.append("bbb");
      }
    } 你会发现打印的是 aaaabbb
      

  3.   

    当然上面的列子涉及到了 String 的值不可变机制
      

  4.   

    推薦一篇文章http://topic.csdn.net/u/20090519/18/7b8cf7ef-bc06-4d26-8a2c-692eb0562231.html
      

  5.   

    楼主,你在main()方法中要输出的a,b是在main()中定义的,而且a是int的,传给方法print是值传递,print中的a是main()a的拷贝.它的改变不会影响到main中的a.
    String是引用传递,传递的是地址,它的改变会改变原来的值,但String比较特殊,它是不可改变的。在print方法中改变的值是在常量池中新创建了“def”.但main()中的b的指向还是abc
    不知这样讲,楼主明白了吗?
      

  6.   

    这样说吧,当你将值传给print(a,b)时,这两个值主要是print方法内的使用,因为String 比较特殊,而楼主也知道String应该是不会改变的,那就很简单了,就是传进去的a的值是否会改变了,a是int型,也就是值类型,而值类型传入方法内使用,即使你在方法内改变了它的值也不会影响到main方法中a的值,你可以到网上找一些有类型这方法的知识看一下,应该很容易理解的