Java 中函数参数传递和函数返回值都是以值方式传递的。当然,对于对象,我们也可以说是引用的方式传递,其实传递也是值,只不过是引用值。引用是一个对象的别名,对于引用的修改就是对于对象本身的修改。
为了便于理解还是可以说成是两种类型,原始类型以值方式传递,对象以引用方式传递。
向函数里传递参数,已经有很多java教程讲解了。这里主要记录一个 函数返回值的问题。在返回一个对象时,是返回值本身的应用,还是拷贝这个值,再传拷贝的引用呢。这是需要考虑清楚的。
这个问题,是我在 不同手机上调试 J2ME 程序时遇到的。
具体如下,这是一个关于时间的工具类。我发觉
Calendar 的 getTime() 在有的机器下 如 Nokia,返回的
Calendar 当前时间的一个拷贝的引用,而 SAMSUNG 则直接返回
Calendar 的当前时间的引用。这导致,我在想得到一个时间所在那一的起始时间和结束时间时,总是得到相同的值,即后一次调用的值。按照,比较正常的理解,这里应该返回拷贝的引用比较正确,就是说 SAMSUNG 的 JVM 实现有些问题。面对这种情况,我只能先用 Date 类 返回 一个 long 值,再用 long 值构造一个新日期,即日历当前日期的拷贝,返回这个拷贝。
修改函数中的最后一行为
return new Date(fCalendar.getTime().getTime());
private static Date fCalendar = Calendar.getInstance();
/**
* Get the beginning of a day
* @param date <description>
* @return <description>
*/
public static Date getBeginOfDay( final Date pDate ) {
fCalendar.setTime( pDate );
try{
fCalendar.set( Calendar.HOUR_OF_DAY, 0 );
fCalendar.set( Calendar.MINUTE, 0 );
fCalendar.set( Calendar.SECOND, 0 );
}catch(ArrayIndexOutOfBoundsException ex){
ex.printStackTrace();
}
return fCalendar.getTime();
}
/**
* Get the end of a day
* @param date <description>
* @return <description>
*/
public static Date getEndOfDay( final Date pDate ){
fCalendar.setTime( pDate );
try{
fCalendar.set( Calendar.HOUR_OF_DAY, 23 );
fCalendar.set( Calendar.MINUTE, 59 );
fCalendar.set( Calendar.SECOND, 59 );
}catch(ArrayIndexOutOfBoundsException ex){
ex.printStackTrace();
}
return fCalendar.getTime();
}
posted on 2010-02-24 21:36
lincode 阅读(2286)
评论(0) 编辑 收藏 所属分类:
Java