开发者社区> 问答> 正文

string为什么要被final修饰?

string为什么要被final修饰?

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

展开
收起
李博 bluemind 2019-04-10 23:40:16 11414 0
17 条回答
写回答
取消 提交回答
  • 1.为了实现字符串池 2.为了线程安全 3.为了实现String可以创建HashCode不可变性

    2020-05-25 09:39:02
    赞同 展开评论 打赏
  • 1.为了实现字符串池 2.为了线程安全 3.为了实现String可以创建HashCode不可变性

    2020-03-31 19:44:07
    赞同 展开评论 打赏
  • 字符串是恒定的,创建之后它们的值不能被改变。StringBuffer是可变的strings.字符串对象不可变让它们可以被共享。

    2020-03-26 13:39:31
    赞同 展开评论 打赏
  • 不可变

    2020-03-18 17:01:06
    赞同 展开评论 打赏
  • 性能和安全考虑,防止被误修改

    2020-03-05 12:02:29
    赞同 展开评论 打赏
  • 被final修饰后不可ga改变

    2020-02-26 17:29:31
    赞同 1 展开评论 打赏
  • 记得《Thinking In Java》中解释过: 1、安全; 2、性能;

    2020-02-18 22:52:19
    赞同 展开评论 打赏
  • 技术架构师 阿里云开发者社区技术专家博主 CSDN签约专栏技术博主 掘金签约技术博主 云安全联盟专家 众多开源代码库Commiter

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

    2019-11-12 17:18:27
    赞同 展开评论 打赏
  • 不可变对象是指一个对象的状态在对象被创建之后就不再变化。不可改变的意思就是说:不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。

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

    2019-10-30 17:29:34
    赞同 1 展开评论 打赏
  • final用于定义不能继承的类 ,不能覆写的方法和常量。 一般定义比较多的全局常量

    public static final int ON =1 ;
    
    2019-10-30 15:49:03
    赞同 展开评论 打赏
  • 精于基础,广于工具,熟于业务。

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

    2019-09-02 18:49:44
    赞同 展开评论 打赏
  • java爱好者,文档生成工具jdoc作者

    为了防止被子类重写

    2019-08-30 13:57:40
    赞同 展开评论 打赏
  • 为了定义一个不变的值,方便后期直接调用,符合使用习惯。

    2019-08-19 11:15:10
    赞同 展开评论 打赏
  • 有志者事竟成

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

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

    2019-08-14 17:31:14
    赞同 展开评论 打赏
  • 为了定义一个固定不变的量

    2019-07-17 23:33:11
    赞同 展开评论 打赏
  • JAVA开发工程师

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

    2019-07-17 23:33:10
    赞同 展开评论 打赏
  • 3年淘宝运营支撑系统研发,6年云数据库平台架构,RDS,NoSQL业务

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

    2019-07-17 23:33:10
    赞同 展开评论 打赏
滑动查看更多
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多