java语言是按照值传递还是引用传递的

2020-11-23 11:46:07 字数 3932 阅读 1472

1楼:育知同创教育

(1):“在java里面参数传递

都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。

(2):在java里面只有基本类型和按照下面这种定义方式的string是按值传递,其它的都是按引用传递。就是直接使用双引号定义字符串方式:string str = “java私塾”;

js是按值传递还是按引用传递

2楼:育知同创教育

是传值的,对象类型的值其实是个内存地址,比如你家的地址,你告诉人家你家地址是xx路xx号,别人就根据这个地址找到你家的位置,所以说xx路xx号就是一个对象类型的值,不管这个值复制多少遍,他所指向的都是同一个地方,也就都会找到那个地方的唯一一个对象

这就是对象类型的值是地址而不是真正对象本身

java string是值传递还是引用传递

3楼:小傻

java string值传递,可以参考如下解释:

java 编程语言只有值传

递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。

java传递参数都是值,如果是对象的话,就是将引用的值复制一份给方法当参数。如果是根据引用把堆里的对象修改了,那么对象真被修改了,不过不是被创建赋值给的那个引用修改的,是方法里的一个复制的引用副本给修改的。

4楼:匿名用户

你是c/c++或是vb转过来的吗?在java中过多考虑引用(指针)和值之间的关系是步入歧途,这正是java的设计者极力避免你考虑的问题。

你需要明白的是:

1、java中所有方法的参数的传递都是“值传递”;

2、java中所有对象类型的变量的“值”,本质上说,包含了java堆中的实际对象的地址,你可以大体认为java的变量对应了c/c++中的指针(其实这里面有更复杂的机制)。事实上,java并不像c/c++一样明确的区分“值语义”与“引用语义”,java栈中也不会存放任何对象的实体(这点与c/c++不同,c/c++栈中可以存放对象实体),所有的java对象都是在堆中。

概念上的区别在于,我这里提到的“变量”是指java栈中的内容,对应你说的“引用”;我提到的“对象”是指java堆中的实体,对应你说的“值”。而一般java教材中提到的“值传递”,是指这些“变量”的内容的传递,不是java堆中的对象实体的传递。

你用字符串来做实验,并推广为所有java对象的做法,并不是特别合适。java的string类型有特殊的处理:所有编译期认识的字符串,都会被放到常量池,于是下面的语句:

a = "s";

b = "s";

a和b并不像其它对象一样有创建的动作,都是直接指向常量池中的"s",所以你可以得到a==b。而下面的语句:

a = new string("s");

b = new string("s");

是分别在java堆中创建了2个对象,此时a!=b。

本质上说,对于基本数据类型(整数、字符等),java的符号==,用于判断二者的值是否相等;对于对象类型,java的符号==,用于判断两个变量是否是“同一个对象”,equals()方法才是用于判断两个对象是否相等。

你希望实现的swap逻辑,在java中通常认为是无法实现的。拿你这个例子来说,swapvalue()中的tmpvalue无论怎么更改,只是改变tmpvalue自己的内容(即不断指向不同的对象),并不会改变value中的内容(始终指向同一个对象)。这也是为什么java最初说自己永远是值传递。

你只有改变tmpvalue指向的对象的值(通过调用这个对象的方法或是更改它的属性),使用value访问时,才能看到这些改变。

为了弥补这个缺陷,c#才加入了ref关键字,允许传入变量的引用(如果参考c/c++,c#传递的实际是二级指针,它的内容是栈中的变量的地址)。

5楼:育知同创教育

string是对象,传递的是引用,但是它有值的特性

6楼:nice01青春

a = new string("s");

b = new string("s");

是分别在java堆中创建了2个对象,此时a!=b。

改正:a,b 的hashcode都是一样的,a==b的

7楼:

你好,请注意java语言里不存在引用传递这个说法,所以不管是对象还是基本数据类型,都是值传递

8楼:月之子

string并不是基本数据类型,当然是引用传递啦!

js是引用传递还是值传递

9楼:育知同创教育

js参数的传递是按值传递的,引用类型传递是一个指针的副本。并不是引用传递

js的实参是按值传递还是按引用传递

10楼:育知同创教育

按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。

按引用传递(call by reference)时,函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。同时两者指向相同的值。

按引用传递会使函数调用的追踪更加困难,有时也会引起一些微妙的bug。

按值传递由于每次都需要克隆副本,对一些复杂类型,性能较低。两种传值方式都有各自的问题。

js的基本类型,是按值传递的。

java 传递的是值还是引用

11楼:育知同创教育

java 八大基本类型做为参数为 值传递

object对象做为参数为 引用传递

java值传递和引用传递的区别

12楼:兄弟连教育北京总校

值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:(形式参数类型是引用数据类型参数):也称为传地址。

方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

13楼:始终灬执着

值传递:指的是在方法调用时,传递的参数是按值的拷贝传递,值传递重要特点:传递的是值的拷贝,也就是说传递后就互不相关了。

引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。

java值传递和引用传递的区别

14楼:育知同创教育

java里只有值传递,不存在引用传递。

当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本,虽然看起来是传递的引用,但实际上只是引用的值的传递。这两个值指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。

java的值传递和引用传递的区别

15楼:育知同创教育

基本数据类型赋值属于值传递;引用类型之间赋值属于引用传递。

值传递传递的是实实在在的变量值;引用传递传递的是对象的引用地址。

值传递后,两个变量改变的是各自的值;引用传递后,两个引用改变的是同一个对象的状态。

16楼:mpp跟着幸福走

引用传递传递是地址值,你也可以把他看成是值的传递