随笔一下:(null、"")
1、null没有分配内存
2、“”已经分配内存,值为“”
注意:
c#中的int?代表可为空整形,所以可以为空。
java的基础类型int不可为空,但是其封装类型Interger作为引用类型,就可以为空了。

3、值传递和引用传递

当使用基本数据类型作为方法的形参时,在方法体中对形参的修改不会影响到实参的数值。
当使用引用数据类型作为方法的形参时,在方法体中修改形参指向的数据内容,则会对实参变量的数值产生影响。因为形参变量和实参变量共享同一块堆区。
当使用引用数据类型作为方法的形参时,在方法体重修改形参变量的指向,则不会对实参变量的数值产生影响。因为形参变量和实参变量分别指向不同的堆区。

原文链接:

(c++ : 对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。)

java中invoke方法传参 java方法中传入参数null_c#

注意:

java中是不存在引用传递的,只存在值传递。(可以简单理解为这就是按值调用和引用调用的区别,而且必须明白即使java函数在传递引用数据类型时,也只是拷贝了引用的值罢了,之所以能修改引用数据是因为它们同时指向了一个对象,但这仍然是按值调用而不是引用调用。)

举两个例子做个对比,不知道恰当不恰当,一个是调了方法,一个没有调。

java中invoke方法传参 java方法中传入参数null_java_02


java中invoke方法传参 java方法中传入参数null_java_03

推荐看这篇文章写的很好。

4、""和equals
(ps:引号中间是等号,有格式,所以等号显不出来,以下是java中的)
” 判断值类型(基础类型)

equals 判断引用类型

注意:当引用类型使用“==”进行判断时,会判断引用地址,而不是引用地址指向的对象的值。

相反使用equals时会判断值。

注意:

集合list存的是对象还是对象的引用,是引用的地址

首先Java中,list只能存引用类型

再者:可以看这个例子:

java中invoke方法传参 java方法中传入参数null_引用类型_04


在这三个值中,无论修改那个值最终都不会影响到其他两个。可以去试试,这里贴张图,可以看看

java中invoke方法传参 java方法中传入参数null_引用类型_05


5、String、StringBuilder、StringBuffer