final是修饰变量的,不是修饰对象本身的
String,StringBuffer一个是在堆上建的,一个是在栈上建的
举例说明:
final String s = "hello";
这里final是修饰变量s的,而不是修饰"hello"
至于说String不能修改,是因为String类是immutable的,就是不能修改的意思,immutable也是一个修饰符
final StringBuffer sb = new StringBuffer("hello");
这里final修饰了sb,sb就不能指向其它对象了
比如sb = new StringBuffer("hi");这样是不允许的
但是sb所指向的那个对象本身还是可以改变的
比如sb.append(" world");是允许的,因为sb并没有变,sb仍然指向的是那个对象,变化的是对象本身 |