黑马程序员技术交流社区
标题:
java基础知识 值传递问题
[打印本页]
作者:
李维
时间:
2012-4-15 11:40
标题:
java基础知识 值传递问题
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却没有
作者:
王小刚
时间:
2012-4-15 11:53
String对象是不可变的,在String对象作为参数传递时,它本身的数值是不会随着形参的值改变而改变的,如:
public class Method{
String str = new String("good"); //创建了一个String对象
char[] ch = {'a','b','c'};
public static void main(String[] args)
{
Methodex=new Method();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+"---");//good---
System.out.print(ex.ch);//gbc
}
public void change(String str,char ch[])
{
str="test ok";//重新创建了一个对象,本身的String对象的值没有变化
ch[0]='g';//改变引用数组中的值
}
}
String与数组对比来看,可以说成String对象的参数传递是引用类型传递的特殊形式。
至于 Integer:
理解这里的关键是区分对象和引用。 这里声明的integer是一个引用,而不是一个对象(只是Java把它设计为看上去好像是对象一样)。这个引用它指向了一个对象,这个对象就是后面用new关键字生成的对象。因此,可以说integer指向了一个Integer对象。
在调用test方法的时候,程序将 integer 作为参数传递给 add 方法了。这里仍然是值传递,在 add 调用过程中,会产生一份新的引用(不妨叫做y)。此时,integer 和y指向了同一个对象。
integer 和 y 指向的是同一个对象, 由于Java的设计,我们可以通过操作引用来达到操作对象的目的。因此,如果我们此时使用y来修改对象的属性 (例如,y.someField++); 你可以看到 integer 指向的对象同时也被修改到了。
另一方面,如果我们让 y 指向另外一个对象, y= num++; 此时 integer 和y就指向了不同的对象。y修改了它指向的对象的属性,很显然不会影响到 integer 指向的对象
作者:
邱俊杰
时间:
2012-4-15 12:03
首先你要知道、String str=new String("str"); 这个代码做了什么动作。 这个str对象是指向 堆内存 “str”,所以你打出来的应该是str 、
作者:
陈扬
时间:
2012-4-15 12:24
1、堆内存产生新对象;栈内存存放某个函数的栈控件、对象变量
2、在堆内存中的新对象的成员变量会被初始化;栈内存中的对象变量存储的是堆内存中实例化对象的首地址(对象的引用距离)
3、除基本数据类型之外的其他变量类型都是引用类型。
你的My_Text 类是引用类型,但是你修改的是这里面的int基本数据类型,所以你修改当然生效啦。因为在堆内存中已经初始化赋值了的,那么当它
修改之后,堆内存地址不变,但是里面的值却修改了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2