修饰变量:
修饰java的基本类型时,在该变量初始化负值时后期是不修改的,static作用于成员变量只是用来表示只保存一份副本;
修饰引用类型的变量时是指向地址不可变,但是地址中存放的值是可变的;
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));
}
}
result:
true
false
大家可以先想一下这道题的输出结果。为什么第一个比较结果为true,而第二个比较结果为fasle。这里面就是final变量和普通变量的
区别了,当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。也就是
说在用到该final变量的地方,相当于直接访问的这个常量,不需要在运行时确定。这种和C语言中的宏替换有点像。因此在上面的一段代码
中,由于变量b被final修饰,因此会被当做编译器常量,所以在使用到b的地方会直接将变量b 替换为它的值。
修饰类:
修饰类是表示该类是最终的,不允许被继承。eg:String
修饰方法:
将该方法锁定,private的方法是默认的final修饰的方法。
局部类和匿名内部类的使用全局变量时需final修饰。
转载:
http://www.cnblogs.com/dolphin0520/p/3736238.html
修饰java的基本类型时,在该变量初始化负值时后期是不修改的,static作用于成员变量只是用来表示只保存一份副本;
修饰引用类型的变量时是指向地址不可变,但是地址中存放的值是可变的;
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));
}
}
result:
true
false
大家可以先想一下这道题的输出结果。为什么第一个比较结果为true,而第二个比较结果为fasle。这里面就是final变量和普通变量的
区别了,当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。也就是
说在用到该final变量的地方,相当于直接访问的这个常量,不需要在运行时确定。这种和C语言中的宏替换有点像。因此在上面的一段代码
中,由于变量b被final修饰,因此会被当做编译器常量,所以在使用到b的地方会直接将变量b 替换为它的值。
修饰类:
修饰类是表示该类是最终的,不允许被继承。eg:String
修饰方法:
将该方法锁定,private的方法是默认的final修饰的方法。
局部类和匿名内部类的使用全局变量时需final修饰。
转载:
http://www.cnblogs.com/dolphin0520/p/3736238.html