public static void main(String[] args) {
Integer j=new Integer(500);
changer(j);
System.out.println(j);为何out 500 传递的是地址 为何没有原对象的值呢 }
private static void changer(Integer j) {
j=100;
}请教这块都这么执行的啊 java引用这块 我学得比较烂 请大侠们不要再把我搞晕 谢谢了
Integer j=new Integer(500);
changer(j);
System.out.println(j);为何out 500 传递的是地址 为何没有原对象的值呢 }
private static void changer(Integer j) {
j=100;
}请教这块都这么执行的啊 java引用这块 我学得比较烂 请大侠们不要再把我搞晕 谢谢了
包装类都覆盖了Object类的toString()方法,以字符串的形式返回包装对象所表示的基本数据类型
JAVA 只有值传递..
内容 下面举个例子
假定一个方法试图将一个参数值增加至3倍
public static void tripleValue(double x)
{
x=3*x;
} 然后调用这个方法 double percent = 10;
tripleValue(percent);
可以看到无论怎样调用这个方法,执行之后,percent的值还是10。下面看一下具体的执行时间过程:
1)X被初始化为percent值的一个拷贝(也就是10)
2)X被乘以3后等于30。但是percent仍然是10
3)这个方法结束之后,参数变量X不再使用
然而,方法参数共有两种类型:
基本数据类型(数字,布尔值)和引用类型
已经看到,一个方法不可能修改一个基本数据类型的参数。而对象引用作为参数就不同了,我们很容易利用下面的这个方法实现将一个雇员的薪金提高两倍的操作:
public static void tripleSalary(Employee x)
{
x.raseSalary(200);
}
当调用
harry = new Employee(...);
tripleSalary(harray); 具体执行的过程为
1)X被初始化为harry值的拷贝,这里是一个对象的引用。
2)raiseSalary方法应用于这个对象引用。x和harry同时引用的那个Employee对象的薪金提高了200%
3)方法结束后,参数变量X不再使用。当然,对象变量harry继续引用那个薪金增至3倍的雇员对象。 已经看到,实现一个改变对象参数状态的方法并不是一件难事。理由很简单,方法得到的是对象引用的拷贝,对象引用及其他的拷贝
同时引用同一个对象。
很多程序设计语言(比如C++)提供了两种参传递的方式:值调用和引用调用。有些程序员认为Java采用的是引用调用,实际上,这种理解是不对的。下面给个反例:
public static void swap(Employee x,Employee y)
{
Employee temp = x;
x=y;
y=temp;
}
如果是引用调用的话,这个方法应该能够实现交换数据的效果
Employee a = new Employee("Alice",...);
Employee b = new Employee("Bob",...);
swap(a,b);
但是方法并没有改变存储在变量a和b中的对象引用。swap方法的参数x和y被初始化为两个对象的引用的拷贝,这个方法交换的是这两个拷贝 JAVA 中方法参数使用情况
1)一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)
2)一个方法可以改变一个对象参数的状态
3)一个方法不能让对象参数引用一个新的对象。
对于基本类型,在方法体内对方法参数进行重新赋值,并不会改变原有变量的值。
对于引用类型,在方法体内对方法参数进行重新赋予引用,并不会改变原有变量所持有的引用。
方法体内对参数进行运算,不影响原有变量的值。
方法体内对参数所指向对象的属性进行运算,将改变原有变量所指向对象的属性值。http://zangweiren.javaeye.com/blog/214369
public static void main(String[] args) {
Integer j=new Integer(500);
j = changer(j);
System.out.println(j);
}
private static int changer(Integer j) {
j=100;
return j;
} 注意:如果实参为对象引用或者数组引用时候,形参的改变才会影响到实参。因为这时候传递的是对象的引用。