请教大家个问题啊
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呢····
迷茫了!
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呢····
迷茫了!
刚才我从写了一个
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);
}
}还是我说的问题
首先 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
String是引用传递,传递的是地址,它的改变会改变原来的值,但String比较特殊,它是不可改变的。在print方法中改变的值是在常量池中新创建了“def”.但main()中的b的指向还是abc
不知这样讲,楼主明白了吗?