在看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做了测试:
没有这个问题。
分享到:
相关推荐
在Java开发过程中,遵循一套规范和注意事项至关重要,它不仅能提高代码的可读性和维护性,还能确保团队间的协作效率。以下是一些核心的Java开发规范和需要注意的事项: 1. **命名规范**: - 类名:使用驼峰式命名...
在Java编程过程中,掌握一些关键的注意事项至关重要,这不仅能提高代码质量,还能避免常见的编程陷阱。以下是一些关于"JAVA注意事项"的详细说明: 1. **命名规范**:Java有严格的命名规则,类名应使用驼峰式命名,...
五、注意事项 1. 参数传递:Java采用值传递,这意味着方法内部对参数的修改不会影响到调用者。 2. 返回值的类型必须与方法声明的返回类型一致,否则编译会出错。 3. 如果方法不返回任何值,返回类型应为`void`。 4....
Java内存泄漏问题是一个重要的主题,尤其对于大型的J2EE应用程序而言,理解并避免内存泄漏至关重要。...理解这些注意事项并将其应用于实践中,可以帮助开发者编写出更加高效且内存友好的Java代码。
在学习过程中,注意以下几个关键点,能够帮助你更好地掌握Java语言。 首先,安装Java Development Kit (JDK)是开始Java编程的第一步。确保正确安装后,配置环境变量是至关重要的。在Windows系统中,你需要设置`JAVA...
这份"java学习资料及注意事项"集合了多种资源,旨在帮助初学者快速掌握Java编程的基础知识和最佳实践。 首先,"Java开发者需坚守的十大基本准则.txt"可能是对Java开发人员至关重要的指导原则。这些准则可能包括但不...
在Java编程中,当涉及到需要精确数值计算的场景时,我们通常会使用`BigDecimal`类。这是因为`float`和`double`类型虽然适用于科学计算和工程计算,但它们...理解其基本操作和注意事项,有助于编写出高效且准确的代码。
使用SDK注意事项 - 在使用AWS S3 Java SDK之前,需要确保开发者已经开通了AWS S3服务,并且配置了访问密钥对。 - 需要注意SDK版本与AWS服务端支持的版本兼容性问题。 - 在代码中硬编码访问密钥可能会带来安全风险,...
Java 中继承的注意事项: 1. 重写(也叫覆盖,也叫重构):重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型;重写方法不能使用比被重写方法更严格的访问权限。重写是类与类之间的关系,两者必须...
4. **源码使用说明.txt**:这是一个文本文件,提供了如何使用这个例子的详细步骤和注意事项,包括如何配置环境、如何调用Java方法等。通常,这样的说明文档对于初学者来说非常有帮助,因为它解释了技术细节和实践...
本文将深入探讨如何在Java中调用.exe可执行文件,以及相关的注意事项。 首先,Java提供了Runtime类和ProcessBuilder类来实现这个功能。Runtime类是每个Java应用都有的一个实例,它提供了运行其他应用程序的方法。而...
6. **注意事项**:如果方法有特殊限制或使用建议,应当指出,如"确保参数非空"。 下面是一个完整的示例: ```java /** * 计算两个整数的和 * * @param num1 第一个加数 * @param num2 第二个加数 * @return ...
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 5开始,Java提供了...
自定义排序的注意事项 在实现自定义排序时,需要注意以下几点: * 必须实现 Comparable 接口 * compareTo 方法的返回值必须是一个整数 * compareTo 方法必须满足反射、对称和传递性 自定义排序是 Java 中的一种...
在Java中,方法的定义包括访问控制符、修饰符、返回值类型、方法名、参数列表和方法体。例如: ```java public static int square(int x) { int y = x * x; return y; } ``` - **访问控制符**:如`public`、`...
下面将详细介绍几种在Java中调用DLL文件的方法,并提供一些实践中的注意事项。 1. **Java Native Interface (JNI)**: JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。要使用JNI调用DLL,...
本资源详细阐述了如何在Java中调用DLL,以及在这个过程中可能遇到的问题和注意事项。 首先,Java本身并不直接支持调用DLL,但可以通过Java Native Interface (JNI) 来实现这一目标。JNI是一种接口,允许Java代码和...
6. Readme.txt:这是一个标准的文档,提供了SDK的基本信息,安装指南,可能的配置步骤以及一些注意事项。开发者在开始使用SDK之前应该先查阅这个文件。 7. examples:这个目录包含了示例代码,帮助开发者了解如何...
三、注意事项 1. 请求码(requestCode)必须在原始Activity中定义,且在onActivityResult()中使用相同值进行匹配。 2. setResult()中的RESULT_OK或RESULT_CANCELED是预定义常量,分别表示成功返回和取消操作。也可以...