Java的方法的参数传递,值传递和引用传递还有String字符串传递
2014-11-11 14:35
387 查看
方法的参数传递
1、值传递
a) 方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。传到方法里的参数类型是基本数据类型的都叫值传递
2、引用传递
a) 也称为传地址。方法调用时,实际参数的地址而不是参数的值被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。传到方法里的参数类型是引用数据类型的都叫引用传递
值传递例子:
上面的例子输出结果为: 第一次输出:5
第二次输出:10
第三次输出:5
看,虽然在swap方法里改变了a的值,但是在main方法里的变量a的值仍然没有改变这就验证了上面的话,基本数据类型传递的话在方法里改变形参的值但是改变不了实际参数的值。。。
在这里我还要说明一个事,那就是String 字符串类型 不属于基本数据类型,但它也不是引用数据类型,它是特殊引用数据类型。例子如下:
结果为:第一次输出:您好!
第二次输出:Hello,Word
第三次输出:您好!
为什么改变不了?因为传字符串的话实际上就是值传递,所以改变不了..........
引用传递例子:
1、值传递
a) 方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。传到方法里的参数类型是基本数据类型的都叫值传递
2、引用传递
a) 也称为传地址。方法调用时,实际参数的地址而不是参数的值被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。传到方法里的参数类型是引用数据类型的都叫引用传递
值传递例子:
1 public class test { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 int a=5; 9 //未调用方法前输出 10 System.out.println("第一次输出:"+a); 11 swap(a); 12 //调用完方法后输出 13 System.out.println("第三次输出:"+a); 14 } 15 public static void swap(int a) 16 { 17 a=10; 18 //改变参数a的值后输出 19 System.out.println("第二次输出:"+a); 20 } 21 }
上面的例子输出结果为: 第一次输出:5
第二次输出:10
第三次输出:5
看,虽然在swap方法里改变了a的值,但是在main方法里的变量a的值仍然没有改变这就验证了上面的话,基本数据类型传递的话在方法里改变形参的值但是改变不了实际参数的值。。。
在这里我还要说明一个事,那就是String 字符串类型 不属于基本数据类型,但它也不是引用数据类型,它是特殊引用数据类型。例子如下:
1 public class test { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 String a="您好!"; 9 //未调用方法前输出 10 System.out.println("第一次输出:"+a); 11 swap(a); 12 //调用完方法后输出 13 System.out.println("第三次输出:"+a); 14 } 15 public static void swap(String b) 16 { 17 b="Hello,Word"; 18 //改变参数a的值后输出 19 System.out.println("第二次输出:"+b); 20 } 21 }
结果为:第一次输出:您好!
第二次输出:Hello,Word
第三次输出:您好!
为什么改变不了?因为传字符串的话实际上就是值传递,所以改变不了..........
引用传递例子:
1 public class test { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 int[] a={1,2,3}; 9 System.out.print("未调用方法前输出的结果:"); 10 for (int i = 0; i < a.length; i++) { 11 System.out.print(a[i]+" "); 12 } 13 System.out.print("\n"); 14 swap(a); 15 System.out.print("调用完方法后输出的结果:"); 16 for (int i = 0; i < a.length; i++) { 17 System.out.print(a[i]+" "); 18 } 19 } 20 public static void swap(int[] b) 21 { 22 b[0]=2; 23 System.out.print("改变参数b的值后输出的结果:"); 24 for (int i = 0; i < b.length; i++) { 25 System.out.print(b[i]+" "); 26 } 27 System.out.print("\n"); 28 } 29 }
相关文章推荐
- Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?
- Java方法的值传递和引用传递
- Java面向对象-方法的值传递和引用传递
- java方法中只有值传递,没有引用传递
- java方法中只有值传递,没有引用传递
- 【Java基础】基本类型的包装类作为参数传递是值传递还是引用传递
- JAVA中的值传递和引用传递,String的值传递特性
- java方法传递参数传递的到底是什么?值调用:引用调用
- java面试题解惑:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 画重点,Java方法的参数到底是值传递还是引用传递?
- java的方法调用,参数是按值传递还是按引用传递
- 【Java】官网中方法的值传递和引用传递
- 讨论java是值传递还是引用传递,到String 常量池的问题学习。
- java中按值传递还是按引用传递--string
- JAVA中的值传递和引用传递,String的值传递特性
- java 之方法调用 方法传参 值传递还是引用传递字节码
- Java方法参数的传递机制,值传递?引用传递?
- Java 把对象作为参数传到一个方法里,这个是值传递还是引用传递, 为什么结果这么怪?
- C#类和结构介绍,方法介绍,值传递和引用传递,静态和非静态,字符串方法介绍
- Java - 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?