问题如上,是不是Java不能像C++一样使用指针或引用来实现这个,
好像Java可以使用引用来实现对类的修改,但像String、Integer等不能实现
是不是这几个类机制和一般类不一样,我不大懂,请教先
好像Java可以使用引用来实现对类的修改,但像String、Integer等不能实现
是不是这几个类机制和一般类不一样,我不大懂,请教先
解决方案 »
- 正则表达式中匹配密码和验证首字母大写的问题
- 关于播放声音文件的java应用程序,为什么会抛出:
- 求人帮忙写Junit-Test
- HashMap遍历
- 500分求Java正态分布算法
- java.sql.SQLException: Syntax error or access violation message from server: "Access denied for user 'root'@'%' to database 'sal
- 棘手的Socket问题,涉及到多线程。请大家帮忙!
- 关于string str="abc"的存储问题的讨论
- 谁能提供一些Swing的源程序下载,学习啊,高分重谢。
- 高分询问:谁熟悉UTF8的,进来介绍一下,怎么设定,如何用JAVA进行编程。
- 如何将"123,125-127"分解成"123,125,126,127"?
- java线程中的自定义事件
比如 i=5 ,Str = "String" ,MyObject = new MyObject();本质都是类似这样的.
那么类似 i = 5 ,简单类型,你把它做参数,java是复制一个它的值过去,所以你在方法里再怎么改也只是改克隆品.
那么 str = "String"呢,这句其实只做了一件事,就是把str这个指向String类型的引用指向了新的String对象“String”。那么它对你str原来引用那个String有什么实际改变么?没有。
而且最重要的是,你在原来的方法里的str现在还是指向原来的值。为什么呢?因为java在传方法参数的时候,他传得是值。也就是说java把你原来的str这个引用复制了一份。然后当参数传进去了。所以,你在方法体里把str指向改变了,对原始的str无影响。
那么到底什么时候能通过传入的参数改变对象自己呢?你这样考虑,原始的str和新复制的str他们有什么共同点?那就是他们都指向原来的“oldString”这个对象。所以,只能是通过“oldString”这个对象自己提供的方法来改变它。这不就是封装么?你str又不是String,你只是一个引用,怎么可能通过一个=操作,就把人家一个对象改变呢?要想变就给用人家对象自己提供的方法来变。
-------------------------------------------------------------------
废话太多了,我自己都受不来了。总之一句话,java里面,所谓的引用,它的作用只能是提供个标志让你在代码里面引用。他不能去操作对象。要想操作对象,前提是对象自己提供方法。
建议楼主看一下thinking in java的Passing & Returning Objects章节
这样说的话很不方便的
int,char不能改,是因为传值调用,改掉的是副本。