今日面试题(技术):
使用final关键字修饰一个变量时,是引用变量不能变,还是引用的对象的内容不能变?
在这里我先解释下, 什么是引用变量不能变?什么是对象的内容不能变?例如下面的代码:
final StringBuffer sb = new StringBuffer("Hello");
sb = new StingBuffer("World");//这就是引用改变.sb指向了新的引用.
sb.append("Itcast");//此时sb中的内容为 "HelloItcast",这就是对象改变了.
那么在上面的代码中, 到底哪个是对的呢?
sb.append("Itcast"); 这句代码是对的,可以编译通过. 而
sb = new StingBuffer("World"); 这句代码会编译报错.
/*
错误: 无法为最终变量sb分配值
sb = new StringBuffer("World");
sb = new StringBuffer("World");
*/
所以说,被final关键字修饰的变量,是引用变量不能变,但是引用变量的对象中的内容是可以改变的.