「关于java中参数传递」关于java参数传递论文

博主:adminadmin 2023-03-18 19:16:09 490

本篇文章给大家谈谈关于java中参数传递,以及关于java参数传递论文对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

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

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

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

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

1.值传递

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

基本数据类型:

·整型:int,long,byte,short

浮点型:float,double

字符型:char

布尔型:boolean

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

2.引用传递

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

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

3.String类型传递

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

说明:

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

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

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

在java中什么是参数传递机制

参数传递,就是方法调用过程中,调用者将参数传递给被调用者的过程。

其实Java中的所有参数传递,传递的都是一样的,参数直接引用值的复制体。

1. 只是对于Java基础类型(int、long、float等等),参数的引用里面包含的就是它们的值,因此是值传递,在被调用的方法内改变它们的值,不会影响调用者。

2. 对于其他对象,引用里面包含的实际是参数对象的地址,也叫引用传递,在被调用的方法内改变它们的值,当然会影响调用者。

3. 对于像String这样的不变类,参数传递的过程中,与第2点类似,是引用传递;但是当被调方法修改不变类的值的时候,其实是新建了一个另外的对象,那么当然也不会影响被调用者。

这里面的区别就在于,对于基础类型,Java的存储方式是 引用-》值,对于其他对象,Java的存储方式是 引用-》地址-》值(其中的值可能是基础类型或其他对象)。

java 参数传递问题

Java的参数传递总结:

JAVA的参数传递总是传"值",但是传值方式也分为两种方式,它们是靠传递参数的类型区分的。这两种类型分别为JAVA的基础类型和Object(对象)类型;基础类型包括boolean,byte,short,char,int,long,float,double,而Object就是对象,如数组.在参数为基础类型时,见代码:

public class A{

public static void main(String arg[]){

int a=3;

method1(a);

System.out.println(a);

}

public static void method1(int a){

a=4;

}

}

此时结果的输出将是1,而且只要你的值在Main函数中没变,a的值不管怎么传都不回变,这是因为a是传值,而这个"值"是a的一个拷贝,a的值在传递后的改变只是改变了a的拷贝的内容,并没有改变真正的a的值;对于参数为对象

public class A{ public class A{

public static void main(String arg[]){ public static void main(String arg[]){

int[] a=new int[1]; int[] a=new int[1];

a[0]=3; a[0]=3;

method1(a); method1(a);

System.out.println(a[0]); System.out.println(a[0]);

} }

public static void method1(int[] a){ public static void method1(int[] a){

a[0]--; a=new int[0];

} a[0]=4;

} }

}

左边的结果将是2,右边的结果将是3(未变),原因是:在传递的参数为对象时,这个传递的"值"中放的内容实际上是对向所在的地址,左边的情况是指针定位到对象的地址后,在上面把内容给改了,所以数组的值后会改变,而右边的情况为给对象新分配了一个指针到新的地址上面去,所以所有的操作都在新的地址上面,并不会影响原来的值。注:对于String,Interger,Boolean,Double等的系统对象,它们虽然是Object,但是任何方式的传递参数的值得改变并不会影响原来的值。

java 关于java方法中参数传递的概念问题

public

class

abc

{

int

a;

int

b;

abc(int

x,

int

y)

{//构造方法,就本体而言对象a的成员变量a=5,b=6

a

=

x;

b

=

y;

}

int

add()

{//

此方法实现的是对象a的成员变量a,b的加法

int

s;

s

=

a

+

b;

return

s;

}

int

add(int

a,

int

b)

{//此方法实现的是传入参数a,b的加法

return

a

+

b;//a,b是参数,与成员变量无关,这是因为a,b是局部变量

}

public

static

void

main(string[]

args)

{

abc

a

=

new

abc(5,

6);

system.out.println("add1的结果:a+b="

+

a.add());

system.out.println("add2的结果:a+b="

+

a.add(5,

7));

}

}

Java参数传递

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的对象数据会变化。

谁知道Java中参数是引用传递还是值传递?

java中方法参数传递方式是按值传递。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而自己本身不会受到任何影响。

如果参数是基本类型,传递的是基本类型的字面量值的拷贝。 

如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。

关于java中参数传递的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于关于java参数传递论文、关于java中参数传递的信息别忘了在本站进行查找喔。