2017-12-24学习java基础知识点

1、final关键字

参考链接:https://www.cnblogs.com/dolphin0520/p/3736238.html

个人总结:

1)修饰类、变量和方法,防止类被继承,防止继承类重写方法,防止变量被修改。

2)当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了

3)引用上面参考链接的部分原文:

1.类的final变量和普通变量有什么区别?

  当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了。

  那么final变量和普通变量到底有何区别呢?下面请看一个例子:

1
2
3
4
5
6
7
8
9
10
11
public  class  Test {
     public  static  void  main(String[] args)  {
         String a =  "hello2"
         final  String b =  "hello" ;
         String d =  "hello" ;
         String c = b +  2
         String e = d +  2 ;
         System.out.println((a == c));
         System.out.println((a == e));
     }
}

  

true
false

  大家可以先想一下这道题的输出结果。为什么第一个比较结果为true,而第二个比较结果为fasle。这里面就是final变量和普通变量的区别了,当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量(目前本人的理解就是看成固定的内存地址)使用。也就是说在用到该final变量的地方,相当于直接访问的这个常量,不需要在运行时确定。这种和C语言中的宏替换有点像。因此在上面的一段代码中,由于变量b被final修饰,因此会被当做编译器常量,所以在使用到b的地方会直接将变量b 替换为它的值。而对于变量d的访问却需要在运行时通过链接(动态的内存地址)来进行。

若有理解偏差,望大神不吝赐教。

4) 引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的。

5)很多时候会容易把static和final关键字混淆,static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变。


2、== 和 equals的区分

参考链接:https://www.zhihu.com/question/26872848

个人总结:

1)Java 语言里的 equals方法其实是交给开发者去覆写的,让开发者自己去定义满足什么条件的两个Object是equal的

2)

equals的含义:equals()方法定义在Object类里面,根据具体的业务逻辑来定义该方法,用于检查两个对象的相等性。

== 的含义:“==”或等号操作在Java编程语言中是一个二元操作符,用于比较原生类型和对象。

3)区分:

==常用于比较原生类型,而equals()方法用于检查对象的相等性。

如果==和equals()用于比较对象,当两个引用地址相同,==返回true。

4)equals的默认实现还是使用的 == 操作符,但是业务中还是需要开发者去自定义。

public boolean equals(Object obj) {
    return (this == obj);
}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值