社区
Java SE
帖子详情
JAVA传对象问题
csdnjun
2000-11-02 05:13:00
public changetonew(String str1){
str1 = "new";
}
public void b(){
String str2 = "old";
changetonew(str2);
System.out.println(str2);
}
str的结果仍然是old, Why?
不要告诉我用返回值来解决,
如果我由许多参数需要得到返回直怎么办?
java不是说传对象时传的是地址吗?
...全文
336
8
打赏
收藏
JAVA传对象问题
public changetonew(String str1){ str1 = "new"; } public void b(){ String str2 = "old"; changetonew(str2); System.out.println(str2); } str的结果仍然是old, Why? 不要告诉我用返回值来解决, 如果我由许多参数需要得到返回直怎么办? java不是说传对象时传的是地址吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
simoncn
2000-12-08
打赏
举报
回复
Java 对原始类型(Primitive)是传值,对其它类型(即对象)是传递指针。
String 类是只读对象。
参见:http://www.cn.ibm.com/developerWorks/java 中的
Java 应用程序中的按值传递语义
LittleBird
2000-11-11
打赏
举报
回复
kz网友说得对。
java里头的传递的是对象的地址(句柄),对象赋值时,java里的“地址”与C以及C++里的“地址”不太一样(这一点很容易混淆,特别是有C以及C++经验的同志)。
C或者C++中,
String szNew = new String("old");
szNew = "new";
这时, szNew的地址还是原来的地址,没有发生变化。
而在Java中
String szNew = new String("old");
szNew = "new";//相当于 szNew = new String("new");
szNew的地址已经发生了变化,String对象是只读的。
在最初的例子中,
调用changetonew(str2)之前,
str1和str2是指向同一个对象的,同一个对象的两个别名而已,地址是一样的。
在调用的函数changetonew中,
执行str1 = "new";后
str1指向的地址已经发生了变化,
而这个变化并不会引起原来的对象的另一个别名str2所指向的地址的变化,
这与C以及C++中的不同。
所以函数执行结束以后,
str2依然保持原来的地址不变,
输出的还是"old"。
lenyu
2000-11-07
打赏
举报
回复
Java传递的对象只是一个引用的实例。java中没有指针,str2=str1的时候,在c里面是复制了指针,而java里面是clone了对象
所以是不能用这样的办法传递参数回来的
用别的办法解决吧
虎叔
2000-11-07
打赏
举报
回复
I not wrong!
:-)
kz
2000-11-06
打赏
举报
回复
wlfjck说错了,Java传递的是地址,不是对象
robber也错了
是这样,由String声明的实例是只读实例,所以
String s1="old";
String s2=s1;
s2="new";
语句三:Java为s2分配了新的内存,所以执行语句三后s2!=s1(这是地址值不等)
String声明的实例是只读实例,这一点与C/C++不同--快给分!!!!
wlfjck
2000-11-05
打赏
举报
回复
你说的没错,Java对于对象的参数不是传地址,而是直接生成一个对象,我们可以将你的程序改写一下:
class Test
{
public void changetonew(String str1,String str3){
str1 = "new";
System.out.println(str1);
if(str1==str3)
System.out.println("yeah");
}
public void b(){
String str2 = "old";
changetonew(str2,str2);
System.out.println(str2);
}
public static void main(String[] args)
{
Test test_one=new Test();
test_one.b();
}
}
系统的输出没有"yeah",所以可以判定作为参数的str1,str3是不同的对象,他们都指向不同的地址!
虎叔
2000-11-04
打赏
举报
回复
String is a special class
crazyjava
2000-11-02
打赏
举报
回复
Java is always pass-by-value.
If u want to change the value of the parameter, there r some workarounds.
1) use array, vector and ect.
2) write your own class, make string, integer ... as data memebers
java
源码包---
java
源码 大量 实例
Java
局域网通信——飞鸽
传
书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽
传
书软件,但是
Java
版的确实不多,因此这个
Java
文件
传
输实例不可错过,
Java
网络编程技能的提升很有帮助。
Java
聊天程序,包括服务端和...
java
临时
对象
_
Java
对象
及其引用
后来才知道,在许多
Java
书中,把
对象
和
对象
的引用混为一谈。可是,如果我分不清
对象
与
对象
引用,那实在没法很好地理解下面的面向
对象
技术。把自己的一点认识写下来,或许能让初学
Java
的朋友们少走一点弯路。为便于...
Java
对象
序列化详解
一、定义 序列化:把
Java
对象
转换为字节序列的过程。 反序列化:把字节序列恢复为
Java
对象
的过程。二、用途
对象
的序列化主要有两种用途: 1) 把
对象
的字节序列永久地保存到硬盘上,通常存放在一...
Java
的
对象
传
参
问题
在c/c++中对于
传
参类型,无外乎就是
传
值、
传
引用、
传
指针这几种。... 但是,在做需求的时候遇到了,将从上一个方法中获取到的
对象
,当做参数
传
进下一个方法中的时候,如果
传
进来的是空
对象
,那么在给...
java
面向
对象
包括面向
对象
概念、类与
对象
的关系、封装、构造函数、this关键字、static关键字、单例设计模式、继承、多态、内部类、异常、包等
java
基础知识。 1、面向
对象
面向
对象
是相对面向过程而言 面向
对象
和面向过程都是...
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章