当前位置:  技术问答>java相关

请高手帮我解释解释!一定给分!

    来源: 互联网  发布时间:2015-05-01

    本文导语:  这个例子讲了什么意思?我怎么看不懂?   ----------------------------------------------------------   Java编程语言只由值传递参数,也就是说,参数不能由被调用的方法来改变。当一个对象实例作为一个参数传递到方法中时,...

这个例子讲了什么意思?我怎么看不懂?  
----------------------------------------------------------  
Java编程语言只由值传递参数,也就是说,参数不能由被调用的方法来改变。当一个对象实例作为一个参数传递到方法中时,参数的值就是对象的引用。对象的内容可以在被调用的方法中改变,但对象引用是永远不会改变的。  

下面的代码例子可以阐明这一点:  
1 public class PassTest {  
2   
3 float ptValue;   
4   
5 // Methods to change the current values  
6 public void changeInt (int value) {  
7 value = 55;  
8 }  
9   
10 public void changeStr (String value) {  
11 value = new String ( " different " );  
12 }  
13   
14 public void changeObjValue (PassTest ref) {  
15 ref.ptValue = 99.0f;  
16 }  
17   
18 public static void main (String args[]) {  
19   
20 String str;   
21 int val;  
22   
23 // Create an instance of the class  
24   
25 PassTest pt = new PassTest ();   
26 // Assign the int   
27 val = 11;  
28   
29 // Try to change it  
30 pt.changeInt (val);  
31   
32 // What is the current value?   
33 System.out.println ( " Int value is: " + val);   
34   
35 // Assign the string  
36 str = new String ( " hello " );  
37   
38 // Try to change it  
39 pt.changeStr (str);  
40   
41 // What is the current value?  
42 System.out.println ( " Str value is: " + str);  
43   
44 // Now set the ptValue  
45 pt.ptValue = 101.0f;  
46   
47   
48 // Now change the value of the float  
49 // through the object reference  
50 pt.changeObjValue (pt);  
51   
52 // What is the current value?  
53 System.out.println ( " Current ptValue is: " +  
54 pt.ptValue);  
55 }  
56 }  
这个代码输出如下内容:  

c:studentsource> java PassTest  
Int value is: 11  
Str value is: hello  
Current ptValue is: 99.0  
字符串对象是不会被changeStr()改变的,但是,PassTest对象的内容被改变了。  

----------------------------------------------------------------  
这是说的什么意思呀?

|
java是传递对象的引用,当调用changeObjValue()时,传进pt的引用,他所
指的对象与外面的pt实际上是同一个。你用pt.ptValue=99.0时,实际已经改变了外面的ptValue了。而在另外的changStr()你用value=“”;实际上是把这个引用指向“”而已。他原来也是指向“”的。
一个与changeObjValue相同的例子。
BufferString bs=new BufferString("qqqq");
changeBufferString(BufferString point)
{
    point.append("wwwww");
}
调用changeBufferString(bs)这个函数后bs的值为qqqqwwww。
因为point也是指向bs对象的,在函数里添加了字符。

|
这段话的意思就是:java进行参数(原始数据类型)传递时,被调用方法得到的只是原变量的一个值拷贝,因此它的只能对这个拷贝进行操作,当然就不能改变原变量的值了。但如果参数是对象,则被调用方法得到的是原对象的一个引用,因此它就能通过该引用对原对象进行操作,所以原对象的内容也就可以在被调用方法中改变了。对象的引用实际上是一个指针,如果被改变了那它所指向的对象不久改变了么??例子里面的字符串对象是个特殊例子,在这里把它当作原始数据类型。
这样解释不知道你明白没??

|
public void changeObjValue (PassTest ref) {  
15 ref.ptValue = 99.0f;  
16 }  
改变了pt.ptValue 的值,因为它直接对地址操作,
其它只是改变了引用的数值

|
如果是基本类型,传递时先拷贝这个值再传过去
如果是对象,拷贝这个引用再传过去
例如声明了如下函数:
void foo(int a);
void fooo(Object o);
调用时:
int s=5;
Vector v=new Vector();

foo(s); 相当于int a=s; foo(a);
fooo(o):相当于Vector vv=v; fooo(vv); vv和v指向同一个对象



    
 
 

您可能感兴趣的文章:

  • 高手帮忙解释
  • 哪位高手能替兄弟解释一下,Struts是怎么回事?
  • 项目中需要读写条形码,哪位高手给解释一下
  • 请高手帮我解释一下这段代码!!!
  • 哪位高手可以解释下Linux的消息机制吗?谢谢
  • VMWare下的给虚拟机添加串口的问题?菜鸟请高手解释
  • 高手请解释一下什么是“添加到主机路由”
  • 哪位高手能解释下gmake 的depend命令
  • 我是新学者,那位高手能解释一下什么是挂载点?它又有什么作用?
  • 一个UNIX操作系统是由那些部门组成的呢?高手详细解释给我
  • 奇怪的日期问题,请高手解释
  • 请高手为我解释一下
  • 请高手帮忙解释一下,insmod ./$module.ko || exit 1中的“||”是什么意思啊,多谢!
  • red hat5 + VMware5 配置samba服务器, 求高手解释
  • 请斑竹和高手们帮我解释一下:范式中的*的作用!感激不尽
  • 请教内核高手,抽空解释一下系统中断调用处理流程
  • 关于"symbol lookup error"问题的诡异现象,高手帮忙解释解释
  • 哪位C语言高手帮我解释下下面程序的运行结果 ???????
  • 请那位高手详细解释一下wait函数的用法和意义?
  • 读PCI时有段代码不懂,请高手解释一下
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高手,高手,高高手请进!
  • 有熟悉EXIM的高手高手么??
  • to 高手:学java应该怎样一步步学习,从菜鸟到高手.
  • 有熟悉EXIM的高手高手么?? iis7站长之家
  • 请问高手在linux中用什么命令可以做linux的启动盘???在等待高手??
  • 有高手研究Agent++麽?里面有个thread.h,蛮难读的,请高手指点
  • 难道高手区里的人就是高手?
  • 在dos下用bc31挑战高手******开发mssql程序,连接时报link err:undefined symbol GETNOTE in module DBEXTERN?(挑战高手)
  • 真正的linux高手,请看过来,看你符合高手标准不?
  • 难道这没有高手吗?难道这没有乐于助人的高手?(高分酬谢62+50+50)
  • 关于我对linux高手用yum,非高手用源码的理由
  • 高手救命,很急——ORACLE817安装在UNIXWARE711上,手工启动数据库后在netasst中连接错误,高手帮我看看?
  • 请教高手lvs的奇怪问题,我挺着急,希望高手别潜水,就就我,先谢谢了
  • 各个高手看看这个问题!本人第一次学习java所以要各位高手的帮助。。
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 我是新手,高手,高手,快来救我
  • EJB问题,请教高手(非高手莫进)
  • 请各位JAVA高手,网业高手看过来,我把能给的分都送出!!!只能给37分,哎!!
  • eWEEK沙龙征集高手座谈


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3