黑马程序员技术交流社区
标题: 参数传递问题 [打印本页]
作者: 左耳的鱼 时间: 2013-7-15 00:40
标题: 参数传递问题
本帖最后由 左耳的鱼 于 2013-7-16 21:02 编辑
public class ArugmentTest {
static class IntA {
private int a;
public IntA(int a) {
this.a = a;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
}
static public void change(int a) {
a = 3;
}
static public void change(IntA a) {
a.setA(3);
}
static public void changeRef(IntA a) {
a = new IntA(9);
}
public static void main(String[] args) {
int a = 2;
change(a);
System.out.print(a);
IntA ia = new IntA(5);
change(ia);
System.out.print(ia.getA());
changeRef(ia);
System.out.println(ia.getA());
}
}//为什么233 讲下流程
作者: chensc 时间: 2013-7-15 05:48
学习学习!
作者: chslzj 时间: 2013-7-15 09:18
- package com.itheima.test;
- public class ArugmentTest {
- static class IntA {
- private int a;
- public IntA(int a) {
- this.a = a;
- }
- public int getA() {
- return a;
- }
- public void setA(int a) {
- this.a = a;
- }
- }
- static public void change(int a) {
- System.out.println("change(int a) invoke");
- a = 3;
- }
- static public void change(IntA a) {
- a.setA(3);
- }
- static public void changeRef(IntA a) {
- /**
- * 这里a指向了一个新的对象
- */
- a = new IntA(9);
- System.out.println("方法内a 的对象:"+a);
- }
- public static void main(String[] args) {
- int a = 2;
- change(a);
- /**
- * a是原生数据类型
- * 不是对象,所以改变不了
- */
- System.out.println(a);
- IntA ia = new IntA(5);
- change(ia);
- /**
- * 这里ia是一个对象
- * 把对象里面的属性改变了,未改变其地址
- */
- System.out.println(ia.getA());
- System.out.println("方法未执行时ia 的对象:"+ia);
- changeRef(ia);
- /**
- * 这里,在方法内部的地址改变不会影响外部的地址
- */
- System.out.println("方法外ia 的对象:"+ia);
- System.out.println(ia.getA());
- }
- }
复制代码
java里面参数有两种传参方式,按值传参和按址传参
1 按值传递的数据类型:八种基本数据类型和String,方法内部的改变不影响方法外部
2 按址传递的数据类型:除String以外的所有复合数据类型,包括数组、类和接口 ,也就是方法内部会影响外部,因为使用同一个地址,当然,内部地址改变不会影响外部
作者: sergio 时间: 2013-7-15 15:03
第一个打印的2,chang(a)只是对象3的引用,并不会改变其本身值类型为2.
第二个打印的3,chang(ia)还是是引用类型的引用,并不会改变其设置的值3。
第三个同上
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |