java怎么实现String的java 引用传递 值传递

本帖子已过去太久远了,不再提供回复功能。String类型传递是值传递,char[]类型传递是引用传递的实现_java
作者:用户
本文讲的是String类型传递是值传递,char[]类型传递是引用传递的实现_java,
如下所示:
package com.lstc.
public class TestDemo3 {
String str = new String(&hello&);
char[] ch = { 'a', 'b' };
如下所示:
package com.lstc.
public class TestDemo3 {
String str = new String("hello");
char[] ch = { 'a', 'b' };
public static void main(String[] args) {
TestDemo3 t = new TestDemo3();
t.change(t.str, t.ch);//String是封装类,是值传递,char数组是引用传递
System.out.println(t.str + " and " + t.ch[0] + t.ch[1]);
public void change(String str, char[] ch) {
str = "test ok";
ch[0] = 'c';
结果是:str任然是hello,ch的第一个元素a变为c
以上就是小编为大家带来的String类型传递是值传递,char[]类型传递是引用传递的实现的全部内容了,希望对大家有所帮助,多多支持云栖社区~
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
string引用传递
java string 引用传递、char类型转换为string、string引用传递、c string 引用传递、string类型转char,以便于您获取更多的相关知识。
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
开发者常用软件,超百款实用软件一站式提供
云栖社区()为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!2001年11月 Java大版内专家分月排行榜第二
2001年10月 Java大版内专家分月排行榜第三
2001年11月 Java大版内专家分月排行榜第二
2001年10月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
代码如下:
public static void main(String[] args) {
DispatcherServlet dispatcherServlet = new DispatcherServlet();
A a = dispatcherServlet.new A("bb");
dispatcherServlet.da(a); // 此行执行完毕,a.getA()值是bb
System.out.println(a.getA());
private A da(A a) {
a = new A("aaaaa");
public A(String a) {
public String getA() {
public void setA(String a) {
疑惑如注释。为何da方法里的new值回到main后会丢失?
经学习得出以下结论:
java只有值传递,没有引用传递
非原始类型也是值传递,传递的是值是该引用,为副本。
在da中修改a的属性值,可以在da方法外生效。
在da中修改a的引用(重新对a赋值),修改的是引用副本。在da方法外不生效!
希望对其它碰到这种问题的人,不明所以的人有所帮助!!哈哈\(^ ^)/
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
虽然说, java没有把指针明文写出来, 但是还是有用到指针的.
dispatcherServlet.da(a); // 这里虽然写的是a这个对象, 但是在方法里使用的是引用
private A da(A a) { // 这里是一个指针对象, 指向上方传入的 那个对象
a = new A("aaaaa"); // 这里只是改变了 指针对象 并没有修改 源对象.
// 如果你想获得新的对象, 那就取这个返回值来用吧.
java里面分为对象, 和 对这个对象的引用对象(或者说指针?).
仓库里的货a, 和这个a货的清单 qd_a, 清单上写了a货在哪个仓库, 哪个区域的哪个位置.
有人把qd_a上的数据改了, 指向了货b, 但是货a却没有受影响, 受影响的是 qd_a这个清单.
这是我理解的.不知道解释清楚了没.. 希望指正.
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
private A da(A a) {
a = new A("aaaaa");
把这里的a改为成员变量即可
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
A da(A &a) {
a = new A("aaaaa");
Java是没有引用传递的,也就是说Java不可能让你把整个参数的引用给替换掉。C/C++有引用传递,不过你必须要在参数的前面加上&符号。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
java传值,不是传引用,只不过传的是指针的值,所以看起来像引用。。。
a = new A("aaaaa");
这一句是反映不到函数外面的,a的值(地址)在函数内修改了是没用的,但a的内容可以修改
比如da里面如果有
a.setA("aaaaa");
那你在函数外面打印出来的值就是"aaaaa"了
和这样的C++等价
void f(A *a) {
a = new A("aaaaa");
void main() {
a = new A("bb");
cout && a.getA(); // "bb"
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
java只有值传递,没有引用传递
正解,传对象的时候一定要记住你传的不是这个对象自己的内存地址,而是这个对象的值,而这个值就是这个对象引用的地址
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
我感觉java传递参数的是分情况的吧,
对容器对象比如Map,是传递了引用而不是复制了值
在函数中对map容器的处理是会变化到原始原始调用者, 这就不能叫传值了吧...
简单类型是传值没错
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
09年的帖子
是否能解决lz的疑问?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
对于非原始类型,引用放在栈上,对象本身放在堆上,栈上的引用会复制一份,对象不复制。
java如果想实现引用传递,可以用boxing,即用数组来存取。
private void foo(int[] iarr)
int ival = iarr[0];
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
朋友,看到这儿我必须说一句,Java是引用传值,我今天才遇到这样的问题,再重复一遍Java是引用传值。你写的代码有看起来有点麻烦,我把类和方法名改了一下,看起来清晰一点`public class CallTest {
public static void main(String[] args) {
CallTest dispatcherServlet = new CallTest();
TypeA typeA = dispatcherServlet.new TypeA("bb");// 调用了TypeA的构造方法,新建了一个TypeA的实例
dispatcherServlet.callMethod(typeA); // 此行执行完毕,a.getA()值是bb
System.out.println(typeA1.getFieldA());
private TypeA callMethod(TypeA typeA) {// 调用了TypeA的构造方法,新建了一个TypeA的实例
typeA = new TypeA("aaaaa");
return typeA;
class TypeA {
private String fieldA;
public TypeA(String fieldA) {
this.fieldA = fieldA;
public String getFieldA() {
return fieldA;
public void setFieldA(String fieldA) {
this.fieldA = fieldA;
}`我再注释上也写了,你实际上创建了两个对象,并没有修改值或者引用,他们就是两个对象,你只是取了其中的一个对象而已。如果你希望输出的结果是“aaaaa”的话,你就取另一个对象就行了,不过你又希望输出结果是"aaaaa"又取错了对象就导致这样的结果了,如果希望结果是“aaaaa”,可以看下面的代码。
public class CallTest {
public static void main(String[] args) {
CallTest dispatcherServlet = new CallTest();
TypeA typeA = dispatcherServlet.new TypeA("bb");// 调用了TypeA的构造方法,新建了一个TypeA的实例
TypeA typeA1 = dispatcherServlet.callMethod(typeA); // 此行执行完毕,a.getA()值是bb
System.out.println(typeA1.getFieldA());
private TypeA callMethod(TypeA typeA) {// 调用了TypeA的构造方法,新建了一个TypeA的实例
typeA = new TypeA("aaaaa");
return typeA;
class TypeA {
private String fieldA;
public TypeA(String fieldA) {
this.fieldA = fieldA;
public String getFieldA() {
return fieldA;
public void setFieldA(String fieldA) {
this.fieldA = fieldA;
楼主,希望你能看到,不希望楼主因为自己的代码出现了问题就对java语言造成错误的理解。补充一下,基本类型是值传递的,String和包装类也会将一些值存进常量池。
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:java按值传递还是按引用传递_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
java按值传递还是按引用传递
&&关于java中是按值传递还是按引用传递的详细讲解,对java程序的理解有很大的帮助
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩5页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 java int 引用传递 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信