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

2021-01-11 19:09:14 字数 5021 阅读 6082

1楼:育知同创教育

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

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

2楼:小傻

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

java 编程语言只有值传

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

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

3楼:匿名用户

你是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#传递的实际是二级指针,它的内容是栈中的变量的地址)。

4楼:育知同创教育

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

5楼:nice01青春

a = new string("s");

b = new string("s");

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

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

6楼:

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

7楼:月之子

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

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

8楼:育知同创教育

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

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

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

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

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

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

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

10楼:始终灬执着

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

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

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

11楼:育知同创教育

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

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

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

12楼:育知同创教育

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

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

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

13楼:mpp跟着幸福走

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

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

14楼:育知同创教育

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

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

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

string是值传递还是引用传递

15楼:ijava学习网

string是引用类型,不过java有字符串常量池机制,

2. 声明字符串常量或者字符串常量连接都要用到字符串常量池

3. 如果常量池中有该字符串序列则返回,所以str创建了一个字符串并放入常量池中,

str2内的字符序列已在常量池中所以str2直接指向str指向的对象。

而new string()一定会在堆上新创建对象,所以肯定false

案例//创建了一个对象

string str="aaa";

//指向一个对象,不是新建

string str2="a";

//同一个内存地址

str==str2返回true

string str2=new string("aaa");

//新建了一个对象,内存地址不一样!

str==str2返回false

注;在java中,不能用“==”和“!=”来判断两个字符串是否相等。因为string是引用类型,而不是基本数据类型。

故它们的比较是使用地址和值

来比较,因为它们是不同的对象,有不同的地址。故str1==str2永远是false,而str1!=str2永远都是true。

java中必须使用string1.equals(string2)来进行判断

string s1="hello";

string s2="hello";

则(s1==s2)=true;

因为他们指向的同一个对象。

string s1=new string("hello");

string s2=new string("hello");

则(s1==s2)=false

如果把其他变量的值赋给s1和s2,即使内容相同,

由于不是指向同一个对象,也会返回false。

所以建议使用equals(),因为equals比较的才是真正的内容

案例 string string1=new string( "aaa" );

string string2=new string( "aaa" );

这两个字符串当然应该是相等的。

如果用表达式string1==string2,则该表达式的值为false

如果用表达式string1.equals(string2),则该表达式的值为true

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

16楼:育知同创教育

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

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

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

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

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

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

1楼 育知同创教育 1 在java里面参数传递 都是按值传递 这句话的意思是 按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。 2 在java里面只有基本类型和按照下面这种定义方式的string是按值传递,其它的都是按引用传递。就是直接使用双引号定义字符串方式 str...

如何利用intent传值,如何利用Intent传递参数?

1楼 匿名用户 intent intent new intent intent putextra extra 值! 取值 intent intent getintent string stringe intent getstringextra extra 如何利用intent传递参数? 2楼 南霸天...

传递的近义词是什么,传递的近义词是啥?

1楼 韩梦妍之歌 传递 相关的近义词 通报 转达 传达 传递 词语解释 词典 拼音 chuan di 释义 1 传送 辗转递送。2 特指考试时以纸片等私递作弊。3 驿站。 传递的近义词是啥? 2楼 雅默幽寒 近义词 传递 传播 传达 传输 传送 通报 转达基本解释 词语解释 chu n d 传递 传...