java基础知识 值传递问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 22:42:56
public class myMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num=0;
Integer integer=new Integer(1);
My_Text mytext=new My_Text();
String str=new String("str");
add(num);
add(integer);
modify(mytext);
modify(str);
System.out.println(""+num);
System.out.println(""+integer);
System.out.println(""+mytext.i);
System.out.println(str);
}
public static void add(Integer num){
num++;
}
public static void modify(My_Text mytext){
mytext.i=12;
}
public static void modify(String str){
str="str1";
}
}
class My_Text{
int i=0;
String str="30";
}

输出结果:
0
1
12
str
为什么?
String Integer My_Text 同样是引用数据类型为什么
My_Text 却改变了值 而 String Integer却没有

回答满意另加分

前两个是基本数据类型,传递到方法中的是值的拷贝,所以在方法中只是把传递的值的拷贝改变了,并没有改变原来的值。

第三个mytext传递是一个对象引用,当你把mytext传递到方法中时,两个对象同时指向了一个引用.所以把i的值改变会影响到原来的值.

第四个是传递的一个String对象,String是一个特殊的对象,它的低层实际上就是char类型的数组,所以它传递到方法中的也是值的一份拷贝,所以在方法中的改变,不会影响到原来的值.

Java的8种基本类型:
byte,short, char, int, long,float,double,boolean.
与此对应的,java提供了8种包装类型:
Byte,Short,Character,Integer,Long,Float,Double,Boolean.
都是按值传递的,包括String。而对象是传递引用的 。
你的My_Text mytext = new My_Text();
mytest对象,在modify(mytext)的时候,是传递引用的。
在modify改变的是引用指向的地址的内容,所以影响了方法外面的mytext。