首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于值传送的题

2013-08-04 
关于值传递的题package com.itcast.classespublic class ZhiChuanDi {/** * java的所有参数传递都是值传

关于值传递的题

package com.itcast.classes;

public class ZhiChuanDi {

/**
 * java的所有参数传递都是值传递,不管基本类型还是引用类型
 */
public static void main(String[] args) {
int x = 100;
int y = 200;
//数值验证值传递
System.out.println("原始:" + x + "原始:" + y);
swap(x, y);
System.out.println("调用函数后:" + x + "调用函数后:" + y);
System.out.println();
//对象验证值传递
Person p1 = new Person("tom", "daxue");
Person p2 = new Person("kit", "zhongxue");

System.out.println("原始:" + p1.name + "原始:" + p2.name);
swap(p1, p2);
System.out.println("调用函数后:" + p1.name + "调用函数后:" + p2.name);
System.out.println();
//实现真正的改变数据
System.out.println("原始:" + p1.name + "原始:" + p2.name);
swap1(p1, p2);
System.out.println("调用函数后:" + p1.name + "调用函数后:" + p2.name);

}

//原始类型数据的值传递 实现不了数值的真正交换
public static void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
System.out.println("函数内部交换后:" + x + "函数内部交换后:" + y);
}

//对象数据的值传递 实现不了对象的真正交换
public static void swap(Person x, Person y) {
Person tmp = x;
x = y;
y = tmp;
System.out.println("函数内部交换后:" + x.name + "函数内部交换后:" + y.name);
}

//对象的数据可以交换
public static void swap1(Person x, Person y) {
String tmp = x.getName();
x.name = y.getName();
y.setName(tmp);
System.out.println("函数内部交换后:" + x.name + "函数内部交换后:" + y.name);
}

}

class Person {
String name;
String school;

public Person(String name, String school) {
this.name = name;
this.school = school;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSchool() {
return school;
}

public void setSchool(String school) {
this.school = school;
}


}


[解决办法]
这是???关于值传送的题
[解决办法]
楼主这是要干吗?
[解决办法]

 看看值传递应该注意什么 

看看这个http://bbs.csdn.net/topics/390525533
[解决办法]
嗯 对原值没有影响
[解决办法]
基本类型的方法传递,不会改变值,想改的话,需要在方法最后return新值;

对象的引用传到方法里,对对象属性的操作时会有影响的,如果不想改变它,需要深拷贝一个对象副本。

基本类型和对象的区别,应该是因为所处内存区域不一样:基本类型存在栈里,值传递有作用域的限制;对象在堆里,传过来的引用虽然是值传递,但是通过引用操作的对象实体在堆上。
[解决办法]
可以改变对象的状态
[解决办法]
值传递不会改变原值,只是会返回一个处理后的值而已

热点排行