Java如何在函数中修改传入参数的值 问题如上,是不是Java不能像C++一样使用指针或引用来实现这个,好像Java可以使用引用来实现对类的修改,但像String、Integer等不能实现是不是这几个类机制和一般类不一样,我不大懂,请教先 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你所说的修改传入的参数的值,一般不就是指用=来操作么。比如 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里面,所谓的引用,它的作用只能是提供个标志让你在代码里面引用。他不能去操作对象。要想操作对象,前提是对象自己提供方法。 Java passes primitives by value (no argument there), but objects are passed by reference.建议楼主看一下thinking in java的Passing & Returning Objects章节 Java对原始数据类型的变量是操作类似C语言的传值调用,对引用类型的变量操作类似于C语言的引用调用,如果要对引用变量作修改,就必须在方法里始终操作传入的变量,而不对该变量赋予新的对象 这个我知道一点,但像Integer、Charater、String; int, char等这些就没法改变吗?这样说的话很不方便的 String,Integer不能改,是因为它们根本就没有提供可以修改成员数据的方法。除非你另外创建一个对象。int,char不能改,是因为传值调用,改掉的是副本。 今天一个同学发的问题,自己敲的代码# 简单的问题你会怎么写? java 基础问题 数据库更新的问题,高手帮忙 关于使用Torque访问DB2数据库的问题,高人请进来指教! Javascript页面传值!急!急! 想问一个关于 jfree chart的问题 ? java2各个版本间的javac一样吗? 想成为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不能改,是因为传值调用,改掉的是副本。