请问在java中定义字符串时要加上final修饰吗?
6个回答
展开全部
他们都说错了,字符串本身是常量,存在静态池里,是不可变的,如果对字符串做操作是会新生成字符串的,因为这点所以才有了StringBuffer和StringBuilder,但是你的问题不在这里,final是来修饰这个引用的,加上final后,这个引用就不能再变了,例如在你定义上述语句之后,在执行x="abcd",这个是不能编译通过的。至于该不该加,如果你需要对这个字符串做操作,当然是不加了,如果你这个值是定死了的,不会再变了,当然也可以不加,但是加上有两点好处,1,安全,你不能对这个引用再进行赋值,保证了他的不变,2,效率,通过jvm,加了final的变量和类执行的效率都高。。
展开全部
亲,final 加到属性上面就是常量了,也就是说他不能变了。String这个类他本身就是final的,所以你定义字符串不须要加,除非你要把这个String变量弄成常量。正常的来说,final修饰就是一个不再改变的量,这样,他的修饰的字符串就要大写,比如:private static final String PRICE=15;这这个PRICE就是个常量了。不明白可再问哈
更多追问追答
追问
谢谢。String这个类他本身就是final的和把String变量弄成常量这里有点混乱……那么String变量和类本身有关系吗?
追答
这样给你说吧,现在有一个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”这个字符串。懂了没亲?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不需要,
Java中字符串被称为字符串常量。
常量就是不可以修改的。因此不需要。
Java中字符串被称为字符串常量。
常量就是不可以修改的。因此不需要。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
final意为常量,加不加final修饰就要看你的这个字符串的用处了,你想要它成为一个不变的常量就加上final修饰,普通的字符串就不用加了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符串常量要加 final。
追问
请问有同学说字符串本来就是常量?这里是指字符串的引用吗?有字符串变量这种说法吗?
追答
"Hello" 是一个常量,但是 String hello = "Hello";hello不是一个常量,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询