`
baoweiwei
  • 浏览: 126682 次
  • 性别: 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开发规范,开发注意事项

    在Java开发过程中,遵循一套规范和注意事项至关重要,它不仅能提高代码的可读性和维护性,还能确保团队间的协作效率。以下是一些核心的Java开发规范和需要注意的事项: 1. **命名规范**: - 类名:使用驼峰式命名...

    JAVA注意事项

    在Java编程过程中,掌握一些关键的注意事项至关重要,这不仅能提高代码质量,还能避免常见的编程陷阱。以下是一些关于"JAVA注意事项"的详细说明: 1. **命名规范**:Java有严格的命名规则,类名应使用驼峰式命名,...

    Java中带参带返回值方法的使用共3页.pdf.zip

    五、注意事项 1. 参数传递:Java采用值传递,这意味着方法内部对参数的修改不会影响到调用者。 2. 返回值的类型必须与方法声明的返回类型一致,否则编译会出错。 3. 如果方法不返回任何值,返回类型应为`void`。 4....

    关于JAVA内存泄漏问题注意事项

    Java内存泄漏问题是一个重要的主题,尤其对于大型的J2EE应用程序而言,理解并避免内存泄漏至关重要。...理解这些注意事项并将其应用于实践中,可以帮助开发者编写出更加高效且内存友好的Java代码。

    Java程序基础学习注意事项总结

    在学习过程中,注意以下几个关键点,能够帮助你更好地掌握Java语言。 首先,安装Java Development Kit (JDK)是开始Java编程的第一步。确保正确安装后,配置环境变量是至关重要的。在Windows系统中,你需要设置`JAVA...

    java学习资料及注意事项

    这份"java学习资料及注意事项"集合了多种资源,旨在帮助初学者快速掌握Java编程的基础知识和最佳实践。 首先,"Java开发者需坚守的十大基本准则.txt"可能是对Java开发人员至关重要的指导原则。这些准则可能包括但不...

    Java中BigDecimal的加减乘除、比较大小与使用注意事项

    在Java编程中,当涉及到需要精确数值计算的场景时,我们通常会使用`BigDecimal`类。这是因为`float`和`double`类型虽然适用于科学计算和工程计算,但它们...理解其基本操作和注意事项,有助于编写出高效且准确的代码。

    AWS S3 Java 开发文档

    使用SDK注意事项 - 在使用AWS S3 Java SDK之前,需要确保开发者已经开通了AWS S3服务,并且配置了访问密钥对。 - 需要注意SDK版本与AWS服务端支持的版本兼容性问题。 - 在代码中硬编码访问密钥可能会带来安全风险,...

    易语言JAVA调用 例子

    4. **源码使用说明.txt**:这是一个文本文件,提供了如何使用这个例子的详细步骤和注意事项,包括如何配置环境、如何调用Java方法等。通常,这样的说明文档对于初学者来说非常有帮助,因为它解释了技术细节和实践...

    java中的继承(子类调用父类构造方法还不懂).doc

    Java 中继承的注意事项: 1. 重写(也叫覆盖,也叫重构):重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型;重写方法不能使用比被重写方法更严格的访问权限。重写是类与类之间的关系,两者必须...

    java调用exe可执行文件

    本文将深入探讨如何在Java中调用.exe可执行文件,以及相关的注意事项。 首先,Java提供了Runtime类和ProcessBuilder类来实现这个功能。Runtime类是每个Java应用都有的一个实例,它提供了运行其他应用程序的方法。而...

    Java中给自己写的方法增加注释

    6. **注意事项**:如果方法有特殊限制或使用建议,应当指出,如"确保参数非空"。 下面是一个完整的示例: ```java /** * 计算两个整数的和 * * @param num1 第一个加数 * @param num2 第二个加数 * @return ...

    java读取PI数据库测点值.docx

    Java 读取 PI 数据库测点值需要使用 PI API 和 JNative,了解 PI 数据库的存储结构,掌握 time functions、archive functions 和 snapshot functions,以及在 Java 中使用 PI API和 JNative 的注意事项。

    Java使用Callable和Future创建线程操作示例

    Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项。 首先,Java 5开始,Java提供了...

    Java 类自定义排序

    自定义排序的注意事项 在实现自定义排序时,需要注意以下几点: * 必须实现 Comparable 接口 * compareTo 方法的返回值必须是一个整数 * compareTo 方法必须满足反射、对称和传递性 自定义排序是 Java 中的一种...

    完整版 Java基础教程 Java入门教程 Java语言程序设计 第5章 方法定义及调用(共20页).ppt

    在Java中,方法的定义包括访问控制符、修饰符、返回值类型、方法名、参数列表和方法体。例如: ```java public static int square(int x) { int y = x * x; return y; } ``` - **访问控制符**:如`public`、`...

    java dll文件调用的几种方式

    下面将详细介绍几种在Java中调用DLL文件的方法,并提供一些实践中的注意事项。 1. **Java Native Interface (JNI)**: JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。要使用JNI调用DLL,...

    java调用dll详解.rar

    本资源详细阐述了如何在Java中调用DLL,以及在这个过程中可能遇到的问题和注意事项。 首先,Java本身并不直接支持调用DLL,但可以通过Java Native Interface (JNI) 来实现这一目标。JNI是一种接口,允许Java代码和...

    windows中JAVA对接SAP所需SDK

    6. Readme.txt:这是一个标准的文档,提供了SDK的基本信息,安装指南,可能的配置步骤以及一些注意事项。开发者在开始使用SDK之前应该先查阅这个文件。 7. examples:这个目录包含了示例代码,帮助开发者了解如何...

    Android Intent带返回值跳转Demo

    三、注意事项 1. 请求码(requestCode)必须在原始Activity中定义,且在onActivityResult()中使用相同值进行匹配。 2. setResult()中的RESULT_OK或RESULT_CANCELED是预定义常量,分别表示成功返回和取消操作。也可以...

Global site tag (gtag.js) - Google Analytics