`
baoweiwei
  • 浏览: 125195 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java中返回值的注意事项

    博客分类:
  • java
阅读更多
在看Core Java过程中发现了一个许久以来未曾注意的地方,就是返回值,Java里虽然没有指针,但是一些参数传递都是通过指针完成的。如下面的Employee类,
class Employee
{
   public Employee(String n, double s, int year, int month, int day)
   {
      name = n;
      salary = s;
      GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
         // GregorianCalendar uses 0 for January
      hireDay = calendar.getTime();
   }

   public String getName()
   {
      return name;
   }
   public double getSalary()
   {
      return salary;
   }

   public Date getHireDay()
  {
      return hireDay;
   }
   public void raiseSalary(double byPercent)
   {
      double raise = salary * byPercent / 100;
      salary += raise;
   }

   private String name;
   private double salary;
   private Date hireDay;
}

假如创建一个对象
	   Employee ben=new Employee("ben",10000,2014,4,1);
	   Date d=ben.getHireDay();
	   MyLog.a(d.toString());
	   double tenYearsInMilliSeconds = 10 * 365.25 * 24 * 60 * 60 * 1000;
	   d.setTime(d.getTime() - (long) tenYearsInMilliSeconds);
	   MyLog.a(ben.getHireDay().toString());

显示结果如下:
Tue Apr 01 00:00:00 CST 2014
Wed Mar 31 12:00:00 CST 2004

这里就出现问题了,再次调用 ben.getHireDay()查看时发现已经改变了,原因就是返回值实际上是一个指针,当对d做操作时,实际上是改hireDay的内存,那么原有的对象就改变了,这样编程语法上不会有什么问题,但实际上谬以千里,还需注意。
正确写法如下:
public Date getHireDay()
   {
      return (Date) hireDay.clone();
   }


再次运行,没有问题:
Tue Apr 01 00:00:00 CST 2014
Tue Apr 01 00:00:00 CST 2014


同时对String和Double做了测试:
没有这个问题。
分享到:
评论
2 楼 baoweiwei 2012-07-23  
Eyal 写道
为什么返回的是指针。。还是没明白

我觉得这是Java的机制,通过返回指针来完成返回。
1 楼 Eyal 2012-07-18  
为什么返回的是指针。。还是没明白

相关推荐

    java基础课件ppt

    关键词注意事项 在Java中,true、faslse和null都是小写的。区别于C++中大写的TRUE、FALSE和NULL。 所有的数据类型所占用的字节数都是固定的,并且和实现无关,因此在Java中没有sizeof操作符。 不必死记这些关键词,...

    Thinking in Java简体中文(全)

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    Thinking in Java 中文第四版+习题答案

    A.5.6 固有方法与程序片的注意事项 A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和 A.6.4 比较CORBA与 A.7 总结 附录B 对比C++和 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 寻找瓶颈 D.2.1 安插自己的...

    java联想(中文)

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    java 编程入门思考

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    Thinking in java(中文)

    6.8 final关键字 6.8.1 final数据 6.8.2 final方法 6.8.3 final类 6.8.4 final的注意事项 6.9 初始化和类装载 6.9.1 继承初始化 6.10 总结 6.11 练习 <br>第7章 多形性 7.1 上溯...

    Java初学者入门教学

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    JAVA_Thinking in Java

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    JAVA设计模式六大原则详细讲解(面向对象语言通用)

    6.恰恰是告诉我们用抽象构建框架,用实现扩展细节的注意事项而已:单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计...

    Think in Java(中文版)chm格式

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 ...

    JAVA接口的使用方法

    接口 接口就是多个类的公共规范 接口是一种引用数据类型,最重要的内容就是其中的:抽象方法 如何定义一个接口的格式: public interface 接口名称{ ...**注意事项: 1:接口当中的抽象方法,修饰符必须是两个固定

    JavaSE 基础 方法.pdf

    一、什么是方法呢? 1. Java方法是语句的集合,它们在一起执行一个功能。 2. 方法是解决一类问题的步骤的有序组合。...注意事项:方法定义时return后面的返回值与方法定义上的数据类型要匹配,否者程序将报错!

    java版中国象棋源码-dissertation_reference_1:dissertation_reference_1

    注意事项,jsp页面中的img标签添加获取项目名路径 ( request.getContextPath() )  ##原理图 架构-服务端 架构-客户端 主页-查询思路 推荐策略(后台) 推荐显示(前台) 推荐通知原理(Android) 爬虫原

    java版中国象棋源码-YuanNews-master:元讯大师

    注意事项,jsp页面中的img标签添加获取项目名路径 ( request.getContextPath() )  ##原理图 架构-服务端 架构-客户端 主页-查询思路 推荐策略(后台) 推荐显示(前台) 推荐通知原理(Android) 爬虫原

    Thinking in Java(中文版 由yyc,spirit整理).chm

    A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...

    2018年黑马程序员全套java教程第4天笔记+讲义+源码

    掌握idea开发工具的安装 能够使用idea创建Java工程 能够使用idea创建包和类 了解idea的Java工程目录 了解idea字体的设置 掌握idea常用开发快捷键 ...掌握方法定义的注意事项 掌握方法重载的概念 能够判断出方法的重置

    Junit单元测试所需要的两个jar包

    1 Junit是什么 JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个...4 测试方法注意事项 必须是public修饰的,没有返回值,没有参数 必须使注解@Test修饰

    阿里云java短信验证码源码-demo-sms:云平台短信验证码通知短信java/php/.net开发实现

    阿里云java短信验证码源码 云平台短信验证码通知短信java/php/.net开发实现 项目初衷 ...由于各大短信通道服务商API参数基本相同,本Demo可以适当减少开发者对接短信通道接口的...注意事项 请求参数 app_key, app_secret

    Javashop开发规范V2.2

    Javashop开发规范V2.2 ...注意事项:见【BaseDaoSupport的意义和存在的问题】 二、 直接声明baseDaoSupport操作数据库 在一些挂件类中或某些特殊情况,可以直接需要直接声明baseDaoSupport 此种操作示例: ...

Global site tag (gtag.js) - Google Analytics