Java核心技术 卷1 学习笔记

1. C++中有指针和引用的概念,而Java中所谓的对象引用等价于C++中的指针。

2. 参数调用方面,Java对基本类型是传值调用,对对象类型是传址(指针)调用,传址调用过程中要复制指针。因此,Java对于voidswap(obj x, obj y)这种函数内部其实只交换了经过复制后的指针的指向,出函数后,原来的对象引用(指针)仍然没有被交换,因此Java无法解决这个问题。在C++中则可以通过传引用(&)来轻松解决。

3. C++Java对待多态性和动态绑定的态度不一样,甚至可以说是相反。C++对待多态和动态绑定的态度是谨慎的,这从声明一个虚函数(virtual关键字)可以看出,C++中的成员函数并不是默认就可以被Override。而Java中所有类的方法都是可以Override的,只是在你不想该方法被Override时需要使用final关键字。

4. Java在类中的对象成员的get函数返回时候需要注意,它实际返回了一个指向该成员的指针,如果这个成员恰好是一个可变对象的话,那么请注意下面的代码:

Class User{
private Date birthday = new Date();
…
public Date getBirthday(){
return birthday;
//return (Date) date.clone();
}
public void setBirthday(Date d) {
birthday = d;
}
…
}
User usr = new User();
Date d = usr.getBirthday();
d.setTime(d.getTime() + (long) 3600  * 1000);
System.out.println(usr.getBirthday());

执行以上代码你会发现,我们并没有调用setBirthday方法,但是usr的birthday却改变了。因此我们应该使用注释掉的那行return代码,clone一个新的对象返回,这样改变d的内容,就不会影响到类成员。

5. Java中的String是不可变对象,IntegerDoubleLong等也是不可变对象,即是指对象在复制时会重新创建一个新对象,并赋给相应变量。因此4中提到的问题,在返回String之类的对象时是不会发生的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值