string为什么要被final修饰?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

string为什么要被final修饰?

2019-04-10 23:40:16 8225 17

string为什么要被final修饰?

本问题来自云栖社区【阿里Java技术进阶2群】。https://yq.aliyun.com/articles/690084 点击链接欢迎加入社区大社群。

取消 提交回答
全部回答(17)
  • 游客eodgnxfbfceek
    2020-05-25 09:39:02

    1.为了实现字符串池 2.为了线程安全 3.为了实现String可以创建HashCode不可变性

    0 0
  • shawn2046
    2020-03-31 19:44:07

    1.为了实现字符串池 2.为了线程安全 3.为了实现String可以创建HashCode不可变性

    0 0
  • 1156606323420497
    2020-03-26 13:39:31

    字符串是恒定的,创建之后它们的值不能被改变。StringBuffer是可变的strings.字符串对象不可变让它们可以被共享。

    0 0
  • galaxystar
    2020-03-18 17:01:06

    不可变

    0 0
  • 1556799415322662
    2020-03-05 12:02:29

    性能和安全考虑,防止被误修改

    0 0
  • zzz菜鸟
    2020-02-26 17:29:31

    被final修饰后不可ga改变

    1 0
  • t.s.f.h
    2020-02-18 22:52:19

    记得《Thinking In Java》中解释过: 1、安全; 2、性能;

    0 0
  • huc_逆天
    2019-11-12 17:18:27

    String作为一种对象类型,但是正如常见的,和基本类型出现,是不会发生变化的,一旦生成,对象不会改变,所以final修饰

    0 0
  • jianxia801
    2019-10-30 17:29:34

    不可变对象是指一个对象的状态在对象被创建之后就不再变化。不可改变的意思就是说:不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。

    String 不可变是因为在 JDK 中 String 类被声明为一个 final 类,且类内部的 value 字节数组也是 final 的,只有当字符串是不可变时字符串池才有可能实现,字符串池的实现可以在运行时节约很多 heap 空间,因为不同的字符串变量都指向池中的同一个字符串;如果字符串是可变的则会引起很严重的安全问题,譬如数据库的用户名密码都是以字符串的形式传入来获得数据库的连接,或者在 socket 编程中主机名和端口都是以字符串的形式传入,因为字符串是不可变的,所以它的值是不可改变的,否则黑客们可以钻到空子改变字符串指向的对象的值造成安全漏洞;因为字符串是不可变的,所以是多线程安全的

    1 0
  • uncle_5
    2019-10-30 15:49:03

    final用于定义不能继承的类 ,不能覆写的方法和常量。 一般定义比较多的全局常量

    public static final int ON =1 ;
    
    0 0
  • 不语奈何
    2019-09-02 18:49:44

    为了防止这个值被后边程序改变,造成程序错误!

    0 0
  • 魔法王者安琪拉
    2019-08-30 13:57:40

    为了防止被子类重写

    0 0
  • 游客h4rcrgbben6ag
    2019-08-19 11:15:10

    为了定义一个不变的值,方便后期直接调用,符合使用习惯。

    0 0
  • Wxy-Coder
    2019-08-14 17:31:14

    1.被final修饰的类,不可以被继承,所以不会别其它类改变,这样会更加的安全.

    2.string是共享在常量池中的,String str="abc", char data[] = {'a', 'b', 'c'};是等价的,他们都放在了字符串常量池中.

    0 0
  • 京墨染沉香丶知半夏当归
    2019-07-17 23:33:11

    为了定义一个固定不变的量

    0 0
  • 阿靖哦
    2019-07-17 23:33:10

    1.为了实现字符串池
    2.为了线程安全
    3.为了实现String可以创建HashCode不可变性

    0 0
  • religioser
    2019-07-17 23:33:10

    一般string 被final 修饰是放在方法的形参里的, 首先string 是不可变的,加final 是为了了从静态检查上,不允许重复给一个string 变量赋值,这种做法是推荐使用的,可以参见erlang 中,所有的变量都是final 的,可以让代码更加已读,每次如果需要用一个新的值,重新申请一个新的变量即可。否则一个变量被反复赋值,代码可读性很差。

    0 0
滑动查看更多
相关问答

41

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 146575浏览量 回答数 41

170

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 231897浏览量 回答数 170

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 340307浏览量 回答数 8

13

回答

[@饭娱咖啡][¥20]我想知道 Java 关于引用那一块的知识

心意乱 2018-10-31 18:44:12 143253浏览量 回答数 13

118

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 300671浏览量 回答数 118

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 148475浏览量 回答数 22

23

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 657370浏览量 回答数 23

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 147439浏览量 回答数 31

43

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 142509浏览量 回答数 43

10

回答

[@墨玖tao][¥20]为什么流式处理框架都是 java 写成的,JVM 是不是在流和批存在着特殊优势。还有分布式资源调度,感觉Mesos 的成长速度跟不上 Yarn。这是为什么?

管理贝贝 2018-10-23 13:18:03 137361浏览量 回答数 10
+关注
李博 bluemind
云栖社区Java、Redis、MongoDB运营小编,有意合作请联系钉钉:15810436147
2107
文章
1103
问答
问答排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载