当被final修饰的变量在满足以下条件时该变量就不再是一个变量而是一个直接量:
1)定义变量时就指定初始值
2)初始值在编译时就能确定下来,怎么才算能确定呢:
除了直接赋值基本类型的直接量外,如果被赋值的表达式只是基本的算术表达式或者字符串连接运算,没有访问普通变量、方法调用,这个初始值在编译时就能确定- final int a = 5+2;//a相当于一个直接量
- //下面的字符串在编译的时期就能确定下来,相当于直接量;
- final String str = "黑马"+"itheima";//程序执行到此处,字符串常量池中会缓存一个"黑马itheima"字符串
- final String str2 = "黑马itheima";//str2直接量指向字符串常量池中的"黑马itheima"
- //由于有方法调用,str3在编译时期无法确定,程序执行到此处会动态生成一个新的字符串对象
- final String str3 = "黑马"+new String("itheima");
- System.out.println(str =="黑马itheima");//输出"true"
- System.out.println(str==str2);//输出"true"
- System.out.println(str2==str3); //输出"false"
- System.out.println(str3=="黑马itheima"); //输出false
复制代码 |