值传递不会改变本身,引用传递(如果传递的值需要实例化到堆里)如果发生修改了会改变本身。
1.基本数据类型都是值传递
package com.example.basic; public class Test { public static void main(String[] args) { int a=10; modify(a); System.out.printf("\n方法main中的a等于%d",a);输出:方法main中的a等于10 } public static void modify(int a){ a=20; System.out.printf("方法modify中的a等于%d",a);输出:方法modify中的a等于20 } }
栈里保存的是变量和方法,堆里保存的是具体实例化的对象
原理:
两个a都保存在栈中,没有交集,互不影响,所以不会发生改变
文章来源地址https://www.toymoban.com/news/detail-418857.html
2.如果传递的是一个需要实例化的对象,就是引用传递
package com.example.basic; public class Test { public static void main(String[] args) { int[] a={1,2,3}; modify(a); System.out.println("方法main中的a[1]:"+a[1]);输出:方法main中的a[1]:88 } public static void modify(int[] a){ a[1]=88; System.out.println("方法modify中的a[1]:"+a[1]);输出:方法modify中的a[1]:88 } }
原理
数组在栈里申明了,但具体数据是保存在堆中,栈中保存的是具体数据的内存引用地址,a和a[1]是同一个内存地址,所以了修改a[1]了,会改动到a。
面试时怎么回答:
值传递不会改变本身,基本数据类型都是值传递(String也这样,括号里不用说)。当发生引用传递,并且传递的值会实例化到JVM的堆中,如果在传递的过程中,改动到了传递的值,由于传递的值和本身,指向同一个内存地址,所以它本身会被修改到。文章来源:https://www.toymoban.com/news/detail-418857.html
到了这里,关于Java的值传递和引用传递的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!