精华内容
下载资源
问答
  • java形参实参

    2016-07-28 10:44:22
    (一)基本数据类型:传值,方法不会改变实参的值。 如int,string ...(1)方法体内改变形参引用,但不会改变实参引用 ,实参值不变。 (2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容

    摘自http://blog.csdn.net/zhaoyue007101/article/details/7870560

    (一)基本数据类型:传值,方法不会改变实参的值。

    如int,string

    (二)对象类型参数:传引用,<"方法体内改变形参引用,不会改变实参的引用">,<"但有可能改变实参对象的属性值">

    String[]数组

    (1)方法体内改变形参引用,但不会改变实参引用 ,实参值不变。

    (2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。


    package com.fortest.code;
    
    public class ParameterTest {
    	
    	static void forChange(String a, String b){
    		a = a+","+b;
    		b = a ;
    	}
    	
    	static void forChange(String[] a){
    		String tmp = a[0];
    		a[0] = a[1];
    		a[1] = tmp;
    	}
    	
    	static void forChange(Person p){
    		p.age = p.age+10;
    	}
    	
    	static void forChangePoint(Person p){
    		p = new Person(50);
    	}
    	
    	public static void main(String[] args){
    
    		String a = "a";
    		String b = "b";
    		System.out.println("before change, a="+a+",b="+b);
    		forChange(a, b);
    		System.out.println("after change, a="+a+",b="+b+"\n");
    		
    		String[] c = {"m","n"};
    		System.out.println("before change, c[0]="+c[0]+",c[1]="+c[1]);
    		forChange(c);
    		System.out.println("after change, c[0]="+c[0]+",c[1]="+c[1]+"\n");
    		
    		Person p = new Person(20);
    		System.out.println("before change, p.age="+p.age);
    		forChange(p);
    		System.out.println("after change, p.age="+p.age);
    		forChangePoint(p);
    		System.out.println("after change point, p.age="+p.age);
    	}
    	
    	static class Person{
    		public int age;
    		public Person(){
    			
    		}
    		public Person(int age){
    			this.age = age;
    		}
    	}
    }
    

    输出结果

    before change, a=a,b=b
    after change, a=a,b=b


    before change, c[0]=m,c[1]=n
    after change, c[0]=n,c[1]=m


    before change, p.age=20
    after change, p.age=30
    after change point, p.age=30


    展开全文
  • java 形参实参

    2016-04-08 22:05:00
    java方法中传值和传引用的问题是个... (一)基本数据类型:传值,方法不会改变实参的值。 [java]view plaincopy publicclassTestFun{ publicstaticvoidtestInt(inti){ i=5; } publicstatic...

    java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清。

     

      (一)基本数据类型:传值,方法不会改变实参的值。

     

    [java] view plain copy
     
    1. public class TestFun {  
    2. public static void testInt(int i){  
    3. i=5;  
    4. }  
    5. public static void main(String[] args) {  
    6. int a=0 ;  
    7. TestFun.testInt(a);  
    8. System.out.println("a="+a);  
    9. }  
    10. }  

     

     

      程序执行结果:a=0 。

     

      (二)对象类型参数:传引用,方法体内改变形参引用,不会改变实参的引用,但有可能改变实参对象的属性值。

      举两个例子:

      (1)方法体内改变形参引用,但不会改变实参引用 ,实参值不变。

     

    [java] view plain copy
     
    1. public class TestFun2 {  
    2. public static void testStr(String str){  
    3. str="hello";//型参指向字符串 “hello”  
    4. }  
    5. public static void main(String[] args) {  
    6. String s="1" ;  
    7. TestFun2.testStr(s);  
    8. System.out.println("s="+s); //实参s引用没变,值也不变  
    9. }  
    10. }  

     

     

      执行结果打印:s=1

     

      (2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。

    [java] view plain copy
     
    1.         import java.util.HashMap;  
    2.         import java.util.Iterator;  
    3.         import java.util.Map;  
    4.         import java.util.Set;  
    5.   
    6.         public class Test {  
    7. public void a(Map a,String b)  
    8. {  
    9. a.put("test", b);  
    10. }  
    11.   
    12. public void b()  
    13. {  
    14. Map a = new HashMap();  
    15. a.put("test", "a");  
    16. String b = "b";  
    17. //printMap(a);  
    18. a(a,b);  
    19. printMap(a);  
    20. }  
    21.   
    22. public void printMap(Map a)  
    23. {  
    24. Set set = a.entrySet();  
    25. Iterator it = set.iterator();  
    26. while(it.hasNext())  
    27. {  
    28. Map.Entry e = (Map.Entry)it.next();  
    29. System.out.println("Key:"+e.getKey()+" Value:"+e.getValue());  
    30.   
    31. }  
    32. }  
    33.   
    34. public static void main(String avgs[])  
    35. {  
    36. Test t = new Test();  
    37. t.b();  
    38. }  
    39. }  



     

      执行结果,打印:Key:test Value:b 。可见在方法a()内改变了实参的内容。

     

      (3)第二个例子是拿map举例的,还有经常涉及的是 StringBuffer :

     

    [java] view plain copy
     
    1. public class TestFun4 {  
    2. public static void testStringBuffer(StringBuffer sb){  
    3. sb.append("java");//改变了实参的内容  
    4. }  
    5. public static void main(String[] args) {  
    6. StringBuffer sb= new StringBuffer("my ");  
    7. new TestFun4().testStringBuffer(sb);  
    8. System.out.println("sb="+sb.toString());//内容变化了  
    9. }  
    10. }  



     

      执行结果,打印:sb=my java 。

      所以比较参数是String和StringBuffer 的两个例子就会理解什么是“改变实参对象内容”了。

     

      总结:

      第一:java方法基本数据类型是传值,对象类型传引用,这是千真万确的。

      第二:当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。

      第三:当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。

    转载于:https://www.cnblogs.com/ziq711/p/5370161.html

    展开全文
  • Java参数传递(其实java参数传递都是值传递,只不过当参数是对象时,传递的是地址,所以参数是对象时,如果通过形参改变对象内的内容,实参对象的内容也会改变,当对形参重新赋值时,这意味形参指向了别的对象,所以...

    Java参数传递(其实java参数传递都是值传递,只不过当参数是对象时,传递的是地址,所以参数是对象时,如果通过形参改变对象内的内容,实参对象的内容也会改变,当对形参重新赋值时,这意味形参指向了别的对象,所以不会修改实参对象的内容)

    理解下面的代码:

    点击(此处)折叠或打开

    public class Test

    {

    public static void test(String str)

    {

    str = "world";

    }

    public static void main(String[] args)

    {

    String str1 = new String("hello");

    test(str1);

    System.out.println(str1);

    }

    }

    public class Test

    {

    public static void test(StringBuffer str)

    {

    str.append(" world");

    }

    public static void main(String[] args)

    {

    StringBuffer str1 = new StringBuffer("hello");

    test(str1);

    System.out.println(str1);

    }

    }

    理解这两个例子需要分清实参和形参的区别,引用和对象的区别

    第一个例子的内部执行过程:

    1.引用str1指向新对象new String("hello")。

    2.test( )刚刚开始调用时,形参(parameter)str复制了实参(argument)str1的值,这个值也就是对象new String("hello")的地址,所以这时候引用str和引用str1指向同一个对象"hello"。

    3.进入到test( )方法内部,“world”这个对象被分配给形参str,而这个操作对实参str1并没有影响,所以这时候,引用str指向"world",而引用str1仍然指向原来的对象"hello"。

    4.test( )方法结束后,形参str从栈内存中消失,他指向的对象"world"由于没有其他引用指向它,也可以被gc回收了。

    4.打印引用str1指向的对象,即"hello"。

    第二个例子的内部执行过程:

    1.引用str1指向新对象new StringBuffer("hello")。

    2.test( )刚刚开始调用时,形参(parameter)str复制了实参(argument)str1的值,这个值也就是对象new StringBuffer("hello")的地址,所以这时候引用str和引用str1指向同一个对象"hello"。

    3.进入到test( )方法内部,形参str调用append方法," world"附加到了引用str所指向的对象"hello"后面,由于形参str和实参str1指向的是同一个对象,所以这个操作同时也改变了引用str1指向的对象,因此这时候,引用str和str1指向同一个对象"hello world"。

    4.test( )方法结束后,形参str从栈内存中消失,他指向的对象"hello world"由于仍然有引用str1指向它,不满足被回收的条件。

    5.打印引用str1指向的对象,即"hello world"。

    理解这个例子后,回到原题,到底是传值还是传引用,一直是个有争议的问题,这个例子中,可以理解为值传递,这个值,就是引用所指向的对象的地址。

    1、Java方法基本数据类型是传值,对象类型传引用,这是千真万确的。

    2、当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。

    3、当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。

    4、按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本

    5、按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本

    6、“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。

    7、在Java里面只有基本类型和按照下面这种定义方式的String是按值传递,其它的都是按引用传递。就是直接使用双引号定义字符串方式:String

    str =“Java”;

    展开全文
  • java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清。(一)基本数据类型:传值,方法不会改变实参的值。publicclassTestFun{publicstaticvoidtestInt(inti){i=5;}publicstaticvoidmain(String[]...

    java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清。

    (一)基本数据类型:传值,方法不会改变实参的值。

    public class TestFun {

    public static void testInt(int i){

    i=5;

    }

    public static void main(String[] args) {

    int a=0 ;

    TestFun.testInt(a);

    System.out.println("a="+a);

    }

    }

    程序执行结果:a=0 。

    (二)对象类型参数:传引用,方法体内改变形参引用,不会改变实参的引用,但有可能改变实参对象的属性值。

    举两个例子:

    (1)方法体内改变形参引用,但不会改变实参引用 ,实参值不变。

    public class TestFun2 {

    public static void testStr(String str){

    str="hello";//型参指向字符串 “hello”

    }

    public static void main(String[] args) {

    String s="1" ;

    TestFun2.testStr(s);

    System.out.println("s="+s); //实参s引用没变,值也不变

    }

    }

    执行结果打印:s=1

    (2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。

    import java.util.HashMap;

    import java.util.Iterator;

    import java.util.Map;

    import java.util.Set;

    public class Test {

    public void a(Map a,String b)

    {

    a.put("test", b);

    }

    public void b()

    {

    Map a = new HashMap();

    a.put("test", "a");

    String b = "b";

    //printMap(a);

    a(a,b);

    printMap(a);

    }

    public void printMap(Map a)

    {

    Set set = a.entrySet();

    Iterator it = set.iterator();

    while(it.hasNext())

    {

    Map.Entry e = (Map.Entry)it.next();

    System.out.println("Key:"+e.getKey()+" Value:"+e.getValue());

    }

    }

    public static void main(String avgs[])

    {

    Test t = new Test();

    t.b();

    }

    }

    执行结果,打印:Key:test Value:b 。可见在方法a()内改变了实参的内容。

    (3)第二个例子是拿map举例的,还有经常涉及的是 StringBuffer :

    public class TestFun4 {

    public static void testStringBuffer(StringBuffer sb){

    sb.append("java");//改变了实参的内容

    }

    public static void main(String[] args) {

    StringBuffer sb= new StringBuffer("my ");

    new TestFun4().testStringBuffer(sb);

    System.out.println("sb="+sb.toString());//内容变化了

    }

    }

    执行结果,打印:sb=my java 。

    所以比较参数是String和StringBuffer 的两个例子就会理解什么是“改变实参对象内容”了。

    总结:

    第一:java方法基本数据类型是传值,对象类型传引用,这是千真万确的。

    第二:当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。

    第三:当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。

    展开全文
  • 方法用父类对象作形参 调用时用子类对象作实参, 则在该方法内使用的是 父类对象的方法。打个断点但不运行以下 看看执行步骤你就明白了~using System;using System.Collections.Generic;using System.Linq;using ...
  • java 形参实参改变

    2019-03-19 16:04:48
    import java.util.Arrays; public class Exam4 { public static void main(String[] args) { int i = 1; String str = "hello"; Integer num = 200; ...
  • java引用形参实参运行结果
  • 这两天和一个朋友和我讨论了一个面试题,是形参实参的问题。一个很有意思的小问题,一开始有些乱后来想想就明白了,所以我就对java参数传递做一个总结,以加深自己的基础知识。形参实参的区别形参就是形式参数,...
  • 形参实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存...
  • java数组形参实参原理

    2019-05-10 14:55:44
    直接看图吧
  • 实参形参是程序设计语言中的通用概念,并不是只有C,C++有而JAVA没有。关于他们两者的区别你知道吗?下面是学习啦小编为大家准备的java形参实参的区别,希望大家喜欢!java形参实参的区别篇一形参不能离开...
  • 形式参数和实际参数函数的参数分为形参实参两种。在本小节中,进一步介绍形参实参的特点和两者的关系。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被...
  • 方法会运用形参,调用的一方会调用实参 Dog d = new Dog(); d.bark(3);//这里的3就是我们定义的实参 void bark(int numOfBarks){//把3赋给参数numOfBark while(numOfBarks > 0){ System.out.println("woof");...
  • 进入changeName1方法,形参a存储实参a的引用,即此时形参实参指向同一个对象。public changeName1(A a){ a.setName("tom"); } 字符串“tom”对象产生,它的引用也产生了,设为“@tom023”,将引用传给形参name...
  • 形参实参引用传递

    2019-08-13 09:34:56
    Java中的形参实参的区别以及传值调用和传引用调用 参考资料 1,Java实参形参与传值和传引用 https://blog.csdn.net/wanliguodu/article/details/55653876 2,Java中的形参实参的区别以及传值调用和传引用调用 ...
  • 当你在定义一个方法的时候,比如 void setter...此时a就是实参 实参a把他的值传递给形参i基本数据类型实参传递给形参的是值对象实参传递给形参的是对象的引用====================================================在...
  • java中的形参实参定义

    2012-12-26 15:15:00
    形参:声明在方法的参数列表中的本地变量。 实参实参是你在调用方法的时候,给这个方法中的形参赋予的值 转载于:https://www.cnblogs.com/a1280055207/archive/2012/12/26/2834127.html...
  • 工作中,发现大多数人对值传递,引用传递理解不深,下面写一遍文章详细聊聊。一、形参形参:用来接收调用方法时传递的参数,只有在被调用时才分配内存,一旦调用结束,就释放内存空间...二、实参调用上面方法swap(6,...
  • 方法用父类对象作形参 调用时用子类对象作实参, 则在该方法内使用的是 父类对象的方法。打个断点但不运行以下 看看执行步骤你就明白了~using System;using System.Collections.Generic;using System.Linq;using ...
  • Java 形参实参

    千次阅读 多人点赞 2017-12-01 18:55:17
    转自:https://dailycast.github.io/Java-形参实参/  前几天在头条上看到一道经典面试题,引发了一些思考。也是写这篇文章的导火索。 背景 请看题: 1 2 3 4 5 6 7 8 9 10 11 12 13 public class Main...
  • java形参实参

    2021-03-30 10:34:00
    相当于将实参的值赋值给实参 不同数据类型时实参形参可以进行自动类型转换,否则进行强制类型转换。
  • 要理解形参实参,并在编码中避免一些必要的错误,需要弄清两个概念。1、什么是形参实参2、方法调用时参数传递的过程3、值传递和引用传递import lombok.AllArgsConstructor;import lombok.Data;import lom...
  • Java形参实参的理解

    2020-10-24 21:21:30
    形参实参的理解
  • 形参 实参

    2013-07-19 13:31:21
    形参中修改对象的值,也会同时修改到实参中。 但是修改对象的内存地址 例如new出来一个对象的话,就不会传到实参中了。 [code="java"] private static void test7(){ Person p = new Person...
  • 方法中形参的“s”(String类型)改变后地址发生了变化,只是形参的“s”(这里也可以随便起个名称如“s1”,“s2”)地址发生了改变,主方法实参“s”地址一直是原地址 故:在方法中形参地址改变不会影响到实参地址;...
  • 要理解形参实参,并在编码中避免一些必要的错误,需要弄清两个概念。1、什么是形参实参2、方法调用时参数传递的过程3、值传递和引用传递importlombok.AllArgsConstructor;importlombok.Data;importlombok...
  • 工作中,发现大多数人对值传递,引用传递理解不深,下面写一遍文章详细聊聊。一、形参形参:用来接收调用方法时传递的参数,只有在被调用时才分配内存,一旦调用结束,就释放内存空间...二、实参调用上面方法swap(6,...
  • Java 形参实参

    千次阅读 多人点赞 2018-09-22 21:56:54
    Java 形参实参的区别: 形参  :就是形式参数,用于定义方法的时候使用的参数,是用来接收调用者传递的参数的。 形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,748
精华内容 1,099
关键字:

java形参实参

java 订阅