A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lixing123456 中级黑马   /  2014-12-17 10:54  /  1856 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不能啊,String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

字符串是常量;它们的值在创建之后不能更改

5 个回复

倒序浏览
肯定不能,你需要下理解一下final的用法,如果确定你的类不会被继承的话,应该把类写成final的,而String类是不可变的,对String类的任何改变,都是返回一个新的String类对象
回复 使用道具 举报
其实这个问题问的有点牵强。如代码:
public class Test {
    static final String str = "Hello";
    public static void main(String[] args) {
        System.out.println("str = "+str);
    }
}
"Hello"是字符串对象,str是它的引用,final可以修饰String类型引用str。这样,在程序中str都引用"Hello",而不能再给str赋其他值。
你的问题:”String能用final修饰吗“有点问题,首先如果你的String指的是"Hello",那么一个直接量或者一个对象是不能被任何修饰符所修饰的。
其次,如果你的String指的是str(对象引用),那么回答是可以。


回复 使用道具 举报
能,final是修饰的是常量,只要你的字符串是常量就o了
回复 使用道具 举报
本帖最后由 张周飞 于 2014-12-18 09:26 编辑

          亲,final 加到属性上面就是常量了,也就是说他不能变了。String这个类他本身就是final的,所以你定义字符串不须要加,除非你要把这个String变量弄成常量。正常的来说,final修饰就是一个不再改变的量,这样,他的修饰的字符串就要大写,比如:private static final String PRICE=15;这这个PRICE就是个常量了。不明白可再问哈  
这样给你说吧,现在有一个A类public class A {
private static final String  PRICE ="111";
private static String price ="222";
}
然后用一个B类来修改A类里的的值
public class B {
A.PRICE ="3333";//这里会报错
A.price ="2222";  //这里是正确的

}
这就说明:被final修饰的值是不可以改变的。现在你可能会感觉到奇怪的是为什么A.price ="2222"/这里是正确的。如下图:

你发现没?变化的是A中的price这个引用,而不是字符串本身放发生了改变。这就是String这个类被final修饰的,所以,后面的“2222”不是在前面的“222”上直接加上一个“2”,而是单独弄了一个空间来放“2222”这个字符串。懂了没亲?


回复 使用道具 举报
张周飞 发表于 2014-12-18 09:25
亲,final 加到属性上面就是常量了,也就是说他不能变了。String这个类他本身就是final的,所以 ...

你说的很容易理解,真的不错,这个问题应该结束了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马