网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.JScript 语法错误.
.atan2 方法.
.Structs的基本配置.
.Java应用技巧.
.意外对象.
.Java事件处理模式.
.Apache Cocoon and XSP.
.我的struts分页算法的实现.
.Java语言语法-控制结构.
.JAVA的动态编译和静态编译.
.发掘身份证编号的潜力.
.用本地引用提高EJB访问效率之一.
.Netscape服务器端编程技术.
.新手上路:JDBC初级应用实例(一).
.Eclipse照亮Java众生 扩大地盘.
.在ADSP中配置Excel作为数据源二(.
.邮件发送程序(可以同时发给多个.
.详细介绍什么是实时JAVA.
.JSF中使用自定义Navigation.
.方便管理plugin或rcp的icons.

一个绝对害了不少人的Java技术问题!

发表日期:2008-1-5



  在Java中方法参数的传递,对象是传递引用,基本数据类型是传递值。而且一直一来都似乎没有人提出过疑问。
  直到最近,我在为公司基本Java开发人员编写考试试卷的时候,我才发现,这错了!在方法中,Java语言中对象传递的是地址,而不是引用,这两个概念是有非常大的差别的,我相信熟悉c++的人都应该知道。
  例如下面:假设对象Test有name的属性。
  public void call(Test t) {
  Test t2 = new Test();
  t2.setName("cba');
  t.setName("abc");
  t = t2 ;
  }
  
  public static void main(String[] arg) {
  Test obj = new Test();
  call (obj) ;
  System.out.println("obj"+obj.getName());
  }
  这个时候,你们可以发现,打印出来的是"abc" ,而不是"cba",原因是这样的,在这次调用中,等于声明了两个变量obj , t,它们指向的是同一个地址,调用call方法,只是将obj指向的地址传递给了t,而obj本身并没有传递过去(也就是没有传递引用),当你重新赋值的时候(也就是将对象引用指向其他存储空间),等于只影响了t,而没有影响obj。
  这样的传递方式只能称之为址传递,或者是引用对象传递,而不嫩说是传递引用或者引用传递。
  我不知道这究竟属于翻译的错误,还是我们理解的错误。但是这样的问题在c++中是有明显的区分的(通过*与&)
上一篇:Java 2 的里程碑,J2SE 1.4.2 and 1.5 人气:536
下一篇:Java 1.5 中新的静态导入特性 人气:863
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐