java方法参数怎么引用传递boolean

Python09

java方法参数怎么引用传递boolean,第1张

Java中的参数传递:分为值传递和引用传递

但本质上,Java中只有值传递。引用传递,其实可以理解为传的是类似指针的东西。

值传递就是把基本变量的值拷贝一份,传递这个拷贝。引用传递则是传递的引用的地址,也就是该变量在内存空间的地址。

1.值传递

只有基本数据类型采用值传递,特点是传递的是值的拷贝,传递完后两者就没有关系了。也就是说方法内和方法外的值互不相干

基本数据类型:

·整型:int,long,byte,short

浮点型:float,double

字符型:char

布尔型:boolean

注:8种基本数据类型以外的数据类型都为引用类型。

2.引用传递

指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。

传递的是一个拷贝,即副本。也就是说,对于一个参数传递,存在两个地址指向同一个内存空间。这里我们可以用内存分配示意图来体现

3.String类型传递

先说结论,String类型传递与基本数据类型的传递效果相似。

说明:

String类对象一旦创建,其内容不可更改:

String类的所有方法都不会改变String类对象内容,要改变String类对象的值就必须创建一个新的String对象。

也就是说,当进行参数传递时,如果方法内对String类对象的值进行了修改,那么实际上是创建了一个新的String类对象,然后让原来的变量指向它而已。但是这个“原来的变量”是一份拷贝副本,只是一开始创建的时候与主方法中的传递的值相同而已,现在改变之后,两者就毫无关系了。

Java的方法参数传递都是值传递。这个问题需要楼主慢慢理解,如果基础薄弱(C、C++基础弱)就记住就好。如果基础好可以从内存角度理解。

    从语法和简单层面理解:str是一个String类型的对象,传递给changeStr方法,传递的是str的引用内容,方法内的changeStr(String value),value变量和str指向了同一个对象,但是value重新赋值后,它的指向改变了,但是str的指向不会发生,所以str的输出还是“Hello”,而changeObjValue方法传入的TEST的对象pt给changeObjValue(TEST ref),ref变量和pt变量指向了同一对象,之后通过改变了对象的内容,pt变量的指向没变,但是执行的对象的变量变了。所以pt的ptValue值变了。

    进一步理解,Java对字符串进行了特殊处理,因为字符串这种数据类型太常用了,为了节省内容提高效率。Java把字符串放入了常量池,所以我们没办法在运行时修改一个字符串对象的内容。也就是对value变量的赋值操作是重写建立了一个对象。楼主可以测试经典的java String的代码:

String a = "a";

String b = "a"

String c = new String("a")

String d = new String("a")

System.out.println(a==b)

System.out.println(a==c)

System.out.println(b==c)

System.out.println(d==c)

     再深入,Java没有C和C++的指针概念,可以粗暴的理解Java的引用是一种特殊的指针(实际上Java尽量把程序猿从指针中解放出来,或者说避免直接操作内存对象)。有一种不负责的说法:Java的基本类型传递传递的是值,也就是值的副本,引用类型传递的时引用。但是要注意String对象的内容不可变,而且传递的引用指向不可变。运行时Java的局部变量在栈空间中(线程私有),对象在堆内存中(线程公有),changeStr方法相当于在堆内存中又开辟了一块儿空间重写分配了一个对象,但是str没有指向这个新new出来的对象。而changeObjValue方法修改的pt指向的对象的内容也就是修改的是堆内存的数据,ref和pt指向的是一块儿内存。所以pt的对象数据会变化。

传递参数主要通过方法传递

unserializedate()把这个构造函数在重载下

unserializedate(string

name,string

sex)

在main方法下调用的时候就直接传参了

比如:string

name="姓名";

string

sex

=

"性别";

new

unserializedate(name,sex)

这样就可以了