精华内容
下载资源
问答
  • Java中将实参传给方法之后,值发生改变是在方法里面,没有影响实参。 栈内存的特点是先进后出,如同装东西一样,最先装进去的东西往往是最后出来的 附上测试代码: public class Test { public static ...

    Java中将实参传给方法之后,值发生改变是在方法里面,没有影响到实参。

    栈内存的特点是先进后出,如同装东西一样,最先装进去的东西往往是最后出来的

    附上测试代码:

    public class Test {
    
    public static void main(String[] args) {
    
    int one=1;
    
    int two=2;
    
    System.out.println("one的值"+one+"two的值"+two);
    
    three(one,two);
    
    System.out.println("one的值"+one+"two的值"+two);
    
    }
    
    public static void three(int num1,int num2){
    
    int test;
    
    test=num1;
    
    num2=test;
    
    num1=num2;
    
    }
    
    }

     

    展开全文
  • 形参影响实参

    2020-08-26 21:16:02
    形参会不会影响实参? 答案是:会! 但是并不是全部都会影响 形参不会影响基本数据类型的实参 public static void changeNumber(int num) { num = 10; System.out.println("执行change方法时" + num); } ...

    形参

    所谓形参,就是形式参数,在你没有调用它的时候他是没有值的。

    实参

    可以理解为你创建的变量就是实参,有具体的值。就算你不赋值他也会有默认的初始值。

    形参会不会影响实参?

    答案是:会!
    但是并不是全部都会影响
    形参不会影响基本数据类型的实参

    public static void changeNumber(int num) {
            num = 10;
            System.out.println("执行change方法时" + num);
        }
    
    
        public static void main(String[] args) {
            /*基本数据类型*/
            int num = 1;
            System.out.println("执行方法前:" + num);
            changeNumber(num);
            System.out.println("执行方法后:" + num);
        }
    

    输出结果

    执行方法前:1
    执行change方法时10
    执行方法后:1
    

    结果显示基本数据类型时,形参并不会影响实参。
    形参可以影响引用类型的实参

        public static void main(String[] args) {
            /*引用数据类型*/
            StringBuffer stringBuffer = new StringBuffer("abc");
            System.out.println("执行方法前:"+stringBuffer);
            changeString(stringBuffer);
            System.out.println("执行方法后:"+stringBuffer);
        }
    
    
        public static void changeStringBuffer(StringBuffer stringBuffer){
            stringBuffer.append("def");
            System.out.println("执行方法时:"+stringBuffer);
        }
    

    输出结果

    执行方法前:abc
    执行方法时:abcdef
    执行方法后:abcdef
    

    形参影响了引用类型的实参!
    下一个例子!

    public static void main(String[] args) {  
            /*引用数据类型*/
            String string = "abc";
            System.out.println("执行方法前"+string);
            changeString(string);
            System.out.println("执行方法后"+string);
        }
        public static void changeString(String string) {
            string = string.concat("def");
            System.out.println("执行方法时" + string);
    
        }
    

    执行结果:

    执行方法前abc
    执行方法时abcdef
    执行方法后abc
    

    形参没有影响引用类型的实参?
    那么什么情况下才会有 形参影响实参呢?
    这就要考虑到底是怎么改变的。
    首先要知道引用数据类型,变量存储的只是一个地址值!
    形参只有在执行的时候才会创建一个临时的空间存储这个形式参数,方法结束这个形式参数的生命周期就结束了。那么形式参数影响实参的时机就肯定是在这个生命周期内!
    一步一步考虑,调用方法的时候需要将实参传入方法,让形参暂时有一个值,因为是引用数据类型,所以形参此时存储的是和实参一样的地址值。
    此时形式参数进行一系列的操作都是对堆空间中的同一个内容进行操作的,所以如果形式参数对堆空间的值修改了,那么实参再查看堆空间里面的数据的时候就是已经被改变过了的数据。这就是为什么StringBuffer受到了形参的影响的原因。
    那么为什么String就没有受到影响呢?
    changeString()方法种,执行的是String的concat方法。

        public String concat(String str) {
            int otherLen = str.length();
            if (otherLen == 0) {
                return this;
            }
            int len = value.length;
            char buf[] = Arrays.copyOf(value, len + otherLen);
            str.getChars(buf, len);
            return new String(buf, true);
        }
    

    这是String类中的concat方法,怎么处理的不用看明白,直接看他的返回值

    return new String(buf, true);
    

    new是干嘛的?创建了新的对象啊!创建对象就是再堆空间新开辟空间了呀!
    这就意味着此时形参存储的地址值现在已经不再是最开始实参给他的地址值了,不管他在怎么操作都是对一个新的堆空间地址中的数据进行操作,原来的实参的堆空间的数据没有发生过改变,所以方法结束后,实参的内容并没有发生改变。
    总结来说就是形参影响引用数据类型的实参,要看地址值是不是发生了改变,如果形参的地址值发生了改变,那么形参就不会影响实参,如果形参的地址值没有发生改变,那他就会影响实参。

    总结

    形参并不会影响基本数据类型的实参。
    形参只有在存储的地址值不发生变化的时候才会影响实参。

    展开全文
  • 1.修改值类型,这个实参是完全无法修改的 2.当形参传递的是引用类型时,修改形参的内容,实参...只有传递给形参的是实参的地址的时候,对形参的修改才能改变实参,当形参不指向实参的地址时,修改形参也没用了。 ...

    1.修改值类型,这个实参是完全无法修改的

    在这里插入图片描述

    2.当形参传递的是引用类型时,修改形参的内容,实参会发生改变

    在这里插入图片描述

    3.当形参传递的是引用类型时,修改形参指向的地址,是不会改变传进来的参数的地址的。

    在这里插入图片描述

    总结

    只有传递给形参的是实参的地址的时候,对形参的修改才能改变实参,当形参不指向实参的地址时,修改形参也没用了。

    展开全文
  • JAVA:形参改变对实参影响 熟悉C/C++的同学都知道,如果想在传入形参的函数中,实现形参改变,实参也跟着改变的话,我们需要手动将实参的地址或引用传入给形参,这样形参生成的拷贝副本,就是实参指向存储单元的...

    JAVA:形参改变对实参的影响


    熟悉C/C++的同学都知道,如果想在传入形参的函数中,实现形参改变,实参也跟着改变的话,我们需要手动将实参的地址或引用传入给形参,这样形参生成的拷贝副本,就是实参指向存储单元的地址,也就是说,形参的改变会导致实参也跟着改变。

    但是由于Java的JVM的机制,我们并不能够获得真正的存储地址,是JVM根据不同的平台自动分配,这也就导致了我们不能手动传递地址,JAVA将自动为引用传递传递一个地址


    一、两种类型:基本类型 和 引用类型

    基本类型的变量保存原始值,即它代表的值就是数值本身, 原始值一般对应在内存上的栈区;基本类型包括: byte, short, int, long, char, float, double, boolean 这八大基本数据类型

    引用类型的变量保存引用值,引用值指向内存空间的地址代表了某个对象的引用,而不是对象本身。对象本身存放在这个引用值所表示的地址的位置。被引用的对象对应内存上的堆内存区。引用类型包括: 类类型接口类型数组

    基本类型和引用类型的区别:基本数据类型在声明时系统就给它分配空间;而引用数据类型不同,它声明时只给变量分配了引用空间,而不分配数据空间。

    二、值传递和引用传递

    值传递:方法调用时,实际参数把它的传递给对应的形式参数,函数接收的是原始值的一个拷贝, 此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值

    引用传递:也称为地址传递、址传递。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。

    通常 基本类型String 传递是值传递,形参的改变不会影响实参的改变


    补充:为什么String的传递不会改变实参的值?

    String表现为值传递,主要是因为这个玩意儿是不可变的!如何理解不可变?我们一般说的改变一个String变量,其实并不是改变的这个String本身,而是用一个新的String去替换掉原来的,原来的String本身并没有变。

    这点类似于C++,在我们不传递地址或引用时,C++会创建一个新的实例,而新实例的改变并不会影响原来实参的数据。类似的,由于String的不可变性,导致在改变值的时候会创造一个新的实例,形参会指向新的实例而不是改变它本身,这就导致了和值传递一样的效果。

    参考:

    [1] https://blog.csdn.net/qq_36761831/article/details/82817803
    [2] https://www.zhihu.com/question/47306147

    展开全文
  • <code class="language-java">public class List203 { public static class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val =... 新人太懂,求解答。</p>
  • 代码部分 主函数 change函数 ...变量传递到函数中时是形参,是不是数组都有参数。对于非数组变量,引用类型形参和...基本数据变量,地址又不一样,形参改变完全不影响实参 但是对于数组变量,形参和实参实际地...
  • 新的更新内容请到mwhls.top查看。 无图/无目录/格式错误/更多相关请到上方的文章首发页面查看。...但在使用中,出现无限循环,测试发现是因为函数内虽然后移了指针,但实参影响。因此好奇这是
  • 形参实参影响

    2020-12-25 20:26:44
    形参的改变一般不会影响实参的改变。 传值 void fun1(int a,int b) { int t; t = a; a = b; b = t; } int main() { int a=4,b=3; fun1(a,b); printf("%d %d\n",a,b); return 0; } 输出:4 3 由上面的例子...
  • 形参实参

    2020-02-06 12:15:36
    Python中没有C++的引用,实参形参可以传值,但形参在函数中改变不会影响实参。一般的变量从函数传回到形参的调用函数时,只能通过return,但如果变量是可变对象(列表或者图形对象),返回到调用函数后,该对象...
  • 形参的改变如何影响实参

    千次阅读 2016-08-10 21:24:04
    在编程中,形参的改变是无法影响实参的,那么有什么办法能将数据返还给调用自己的上层函数呢? 通过return,全局变量,指针,引用即可。 return的缺点是每次只能返回一个参数;如果想返回多个,可能需要将数据存入...
  • 四、传递对象发生修改情况 代码: public class UserTest {  public static void main(String[] args){  User user=new User("hanmeimei",29);  System.out.println(user);  method(user);  ...
  • // 形参的改变不影响实参的值!!所以要再赋值一遍 } return maxNode; } } 形参的改变不影响实参的值!!!! 形参的改变不影响实参的值!!!! 形参的改变不影响实参的值!!!!
  • 形参实参的区别

    2020-12-20 14:00:03
    2)在方法调用的时候,只能把实参的值传送给形参能把形参的值反向的传递给实参,因此,在方法调用过程中,对形参值的改变不会影响实参的值 如下例所示: public class Test { public static void f(int n) { n++; ...
  • 普通类型:此时只涉及栈内存,每个方法使用后都会在栈内存中消失,不同的方法在栈内存中互无关联,所以导致形参的改变不影响实参的值。 引用类型:设计栈内存和堆内存,形参改变之后会改变堆内存的值,方法使用后从...
  • 形参个数 时php会发出警告,因为php的解释机制会认为,有参数被定义了却没有被使用,那很可能会影响函数的功能。所以会发出警告。然而,当 实参个数>形参个数 时,php是不会报错的,它只会取前面的几个参数,多余的则...
  • 对于可变类型,因变量能被修改,所以运算时不会影响到变量本身;而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量.形参: 函数需要传递的参数实参:调用函数时传递的参数补充知识:python函数方法...
  • 形参实参,构造器

    2020-07-22 12:31:57
    而参数本身影响。 %%%形参是基本数据类型,将实参基本数据类型变量的“数据值”传递给形参 %%%形参是引用数据类型,将实参引用数据类型变量的“地址值”传递给形参 示例: public class Testorder { public ...
  • 在用整形,浮点型,或者字符型做实参时,这里的形参x,y只是接受a,b实参的值,在函数sum里面如果形参x, y值发生改变,对main函数里面没有任何影响。如果我们需要吧函数sum中计算的值传给main函数,则要借助return。...
  • 说的通俗一点就是函数声明和定义时候的参数,是形参,形参不占用内存空间,而在函数调用过程中传的参数是实参,这些参数都是占据内存空间的。 那么两者有什么区别呢? 两者的区别: 1.形参在调用的时候才会分配内存...
  • JS形参实参问题

    2017-09-07 11:54:00
    JavaScript的参数传递也都是采用值传递的方式进行传值。   (1) 通过实参调用函数的时候,...例如:将全局变量作为参数传到函数内部修改之后并不影响变量自己 <script> function test(value) { //...
  • 调用函数计算,函数没有return语句,无返回值,形参实参不会相互影响 #include <stdio.h> void try1(int,int,int);//注意这里的分号能丢掉 int main(){ int x=2,y=3,z=0; printf("(1)x=%dy=%dz=%d\n",x,...
  • 2、Java参数传递的机制规则参数 —》基本数据类型—》实参真实存储的数据值参数 —》引用数据类型—》实参存储数据的地址值3、值传递与引用传递的区别值传递:真实的数据值—》改变副本不影响原变量方法调用时,实际...
  • 对于C程序员来说,我们都知道C在函数调用时,采用的是值传递,即形参实参分配不同的内存地址,在调用时将实参的值传给实参,在这种情况下,在函数内修改形参并不会影响实参,但是这样带来一个问题,如果我们需要...
  • 实参形参占用不同的内存单元,即使同名互不影响。 在被定义的函数中,必须指定形参的类型 实参形参的类型应相同或赋值兼容。 良好的程序设计习惯:为了使程序具有良好的可读性并减少出错,凡要求...
  • java中形参实参的区别(值传递 引用传递) 形参实参的区别 形参 就是形式参数,用于定义方法的时候使用的参数,用来接收调用者传递的参数。...在值传递的过程中,只能把实参传递给形参,而能把形参...
  • 使用此方法创建中间变量,需要考虑形参实参影响. #include <stdio.h> #include <stdlib.h> void Swap(int a,int b) { a = a + b; b = a - b; a = a - b; printf("%d\n", a); printf("%d\n",...
  •   ① 值传递:形参实参的一份临时拷贝,形参实参无任何关联,在函数中对形参进行修改不影响外部的实参。   ② 址传递:形参实际就指向实参,在函数中对形参指向的空间中的内容修改,实际就是修改实参本身。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 964
精华内容 385
关键字:

形参不影响实参