在学习this()用法的途中,我发现使用private 修饰变量name 时,name会显黄,加上final之后就不会了。在好奇心的驱使下,进一步深入学习final用法。(基础不扎实)
最后查原因是因为IDEA会对私有变量进行特殊显示来提醒开发者的注意,加了final之后可以确保基本变量的值不被修改所以编译就不显黄了。
首先,final关键字用于确保类、方法、变量的值不被修改和继承,确保代码的安全性。其中变量是用的最多的,也是本文讲解的部分。
修饰变量
final修饰变量的作用是使变量不被其他对象引用,并且可以改变第一次引用对象的内容。
好处:在多线程环境下提高线程安全性。
例如下面的例子,如果name被final修饰,则不能继续对name进行赋值,否则报错
public class Test1 {
public static void main(String[] args) {
final String name = "张三";
name = "李四";//报错
System.out.println(name);
}
}
也可以不先赋值name,之后赋值
public class Test1 {
public static void main(String[] args) {
final String name ;
name = "张三";
System.out.println(name);
}
}
输出:张三
深入探讨
——1.final修饰的变量和常规变量有什么区别?——
先看例子:
public class Test1 {
public static void main(String[] args) {
String hello = "hello";
final String hello1 = "hello";
String helloWorld = "helloworld";
String x = hello+"world";
String y = hello1+"world";
System.out.println(helloWorld==x);
System.out.println(helloWorld==y);
}
}
先思考下
3
2
1
答案:false true
为什么?
因为final修饰了变量hello1,编译器会自动优化将hello1看作hello这个常量,(前提一定是知道final变量值!!!),所以(hello1+“world”==“helloworld”)为true。
——2.被final修饰的引用变量的对象的内容可以改变——
public class Test1 {
public static void main(String[] args) {
final Test2 test2 = new Test2();
System.out.println(++test2.i);
}
}
class Test2{
public int i =0;
}
输出:1
可以看出final修饰的引用变量的对象的内容是可以改变的。