java参数传入泛型类型_java泛型方法参数传递

Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言)。

如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的值不会改变原始的值。

如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的 值,那么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的 地址,所以不会改变参数的值。

基本类型参数传递:不改变值

java参数传入泛型类型_java泛型方法参数传递_第1张图片

引用类型参数传递:改变值

java参数传入泛型类型_java泛型方法参数传递_第2张图片

无论是什么语言,要讨论参数传递方式,就得从内存模型说起,主要是我个人觉得从内存模型来说参数传递更为直观一些。闲言少叙,下面我们就通过内存模型的方式来讨论一下Java中的参数传递。

这里的内存模型涉及到两种类型的内存:栈内存(stack)和堆内存(heap)。基本类型作为参数传递时,传递的是这个值的拷贝。无论你怎么改变这个拷贝,原值是不会改变的。看下边的一段代码,然后结合内存模型来说明问题:

publicclassParameterTransfer { publicstaTIcvoidmain(String[] args) { intnum = 30; System.out.println( “调用add方法前num=”+ num); add(num); System. out.println( “调用add方法后num=”+ num); } publicstaTIcvoidadd( intparam) { param = 100; } }

这段代码运行的结果如下:

调用 add方法前 num= 30调用 add方法后 num= 30

程序运行的结果也说明这一点,无论你在add()方法中怎么改变参数param的值,原值num都不会改变。

你可能感兴趣的:(java参数传入泛型类型)