java传参方式

来源:互联网 发布:软文软件 编辑:程序博客网 时间:2024/06/08 09:36

java传参分两种类型,java都是值传递


1.基本类型使用值传递,形参是对实参的一个拷贝,在方法里对形参修改不影响实参的值


2.引用类型是引用值传递,对于类的实例它传递的是类的引用,形参是对实参的引用值得拷贝,形参可实参指向的是同一个对象地址
例子

public class testchuancan {public static void main(String[] args) {// 引用值传递MyClass myClass = new MyClass();StringBuffer buffer_real = new StringBuffer("hello");myClass.changeValue(buffer_real);System.out.println(buffer_real.toString());// 基本类型值传递int k = 1;myClass.changeBaseVar(k);System.out.println("changeBaseVar外部非static" + k);}}class MyClass {void changeValue(StringBuffer buffer_formal) {// 对引用变量,传参是引用值传递buffer_formal.append("world");// 形参buffer_formal和实参buffer_real指向的同一块内存System.out.println("changeValue内部:" + buffer_formal.toString());buffer_formal = new StringBuffer("1111");// 形参buffer指向了新的引用,不影响实参的值System.out.println("changeValue内部:" + buffer_formal.toString());}void changeBaseVar(int i) {// 基本类型直接拷贝值传递i++;System.out.println("changeBaseVar内部" + i);}}

另外一个例子说明对象传递也是值传递

public class testobjchuanzhi {public static void main(String args[]) {Student s1 = new Student("ACE");Student s2 = new Student("SABO");swap(s1, s2);s1.pn("swap方法外,s1_fomal");s2.pn("swap方法外,s2_fomal");}public static void swap(Student s1_fomal, Student s2_fomal) {// 使用形参操作真实对象s1_fomal.modiName("lufei");s1_fomal.pn("交换之前swap方法内,修改名字的s1_fomal");// s1_fomal s2_fomal 传递的是 s1 s2的引用值拷贝// s1和s1_fomal指向的是同一个对象。s2和s2_fomal指向的是同一个对象。交换fomal不影响real,但s1_fomal可以操作对象Student temp = s1_fomal;s1_fomal = s2_fomal;s2_fomal = temp;// s1_fomal s2 _fomal形参使用之后就被丢弃s1_fomal.pn("交换之后swap方法内,s1_fomal");s2_fomal.pn("交换之后swap方法内,s2_fomal");}}class Student {String name;int age;public Student(String var) {this.name = var;}public void pn(String temp) {System.out.println(temp + ":" + name);}public void modiName(String var) {name = var;}}

结果:

交换之前swap方法内,修改名字的s1_fomal:lufei交换之后swap方法内,s1_fomal:SABO交换之后swap方法内,s2_fomal:lufeiswap方法外,s1_fomal:lufeiswap方法外,s2_fomal:SABO



原创粉丝点击