展开

关键词

首页关键词string为什么不可变

string为什么不可变

相关内容

云服务器

云服务器

稳定、安全、弹性、高性能的云端计算服务,实时满足您的多样性业务需求
  • 为什么说String不可变?

    String a = hello;System.out.println(a);a = world!!!;System.out.println(a);输出一个是 hello 一个world!!!为什么说String 是不可变的。
    来自:
    回答:2
  • Java中的String为什么是不可变的?

    什么是不可变对象?众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。为什么String对象是不可变的?要理解String的不可变性,首先看一下String类中都有哪些成员变量。这也是为什么像replace, substring,toLowerCase等方法都存在返回值的原因。也是为什么像下面这样调用不会改变对象的值:String ss = 123456; System.out.println(ss = + ss); ss.replace(1, 0); System.out.println但是一般我们不这么做。这个反射的实例还可以说明一个问题:如果一个对象,他组合的其他对象的状态是可以改变的,那么这个对象很可能不是不可变对象。
    来自:
    浏览:129
  • 聊聊JAVA中 String类为什么不可变

    前世今生String不可变这个话题应该是老生长谈了,你可以说它就是设计者的龟腚,然后巴拉巴拉说出一大堆优点,也可以说它忠于爱情,只要JVM存活,它便万年不变。我觉得到这里各位小伙们应该就知道为什么String不可变了,戴了个final的帽子,官方注释说明创建后不能被改变,但是为什么String要使用final修饰呢?面试精选在了解String不可变之前,我觉得有必要分析一道经典的面试题:public class Apple { public static void main(String[] args) { String需要说明一点的是,在object中,equals()是用来比较内存地址的,但是String重写了equals()方法,用来比较内容的,即使是不同地址,只要内容一致,也会返回true,这也就是为什么a.equals总结了解到String是不可变的,知道了常量池是怎么个东西。重温了面试题,有兴趣的小伙伴也可以去阅读下String的源码,浩浩荡荡的3000+。
    来自:
    浏览:134
  • 广告
    关闭

    腾讯云+社区「校园大使」招募开启!报名拿offer啦~

    我们等你来!

  • Java 中的 String 为什么是不可变的?

    什么是不可变对象? 众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。为什么String对象是不可变的? 要理解String的不可变性,首先看一下String类中都有哪些成员变量。这也是为什么像replace, substring,toLowerCase等方法都存在返回值的原因。也是为什么像下面这样调用不会改变对象的值: String ss = 123456; System.out.println(ss = + ss); ss.replace(1, 0); System.out.println但是一般我们不这么做。这个反射的实例还可以说明一个问题:如果一个对象,他组合的其他对象的状态是可以改变的,那么这个对象很可能不是不可变对象。
    来自:
    浏览:769
  • 聊聊JAVA中 String类为什么不可变

    前世今生String不可变这个话题应该是老生长谈了,你可以说它就是设计者的龟腚,然后巴拉巴拉说出一大堆优点,也可以说它忠于爱情,只要JVM存活,它便万年不变。我觉得到这里各位小伙们应该就知道为什么String不可变了,戴了个final的帽子,官方注释说明创建后不能被改变,但是为什么String要使用final修饰呢?面试精选在了解String不可变之前,我觉得有必要分析一道经典的面试题:public class Apple { public static void main(String[] args) { String需要说明一点的是,在object中,equals()是用来比较内存地址的,但是String重写了equals()方法,用来比较内容的,即使是不同地址,只要内容一致,也会返回true,这也就是为什么a.equals总结了解到String是不可变的,知道了常量池是怎么个东西。重温了面试题,有兴趣的小伙伴也可以去阅读下String的源码,浩浩荡荡的3000+。
    来自:
    浏览:471
  • 为什么Java里面String类是不可变的

    在Java里面String类型是不可变对象,这一点毫无疑问,那么为什么Java语言的设计者要把String类型设计成不可变对象呢?这是一个值得思考的问题。ok,下面我们来分析下为什么String是不可变的?通过String源码可以看到,String类型的底层是由final修饰的char数组存储。另一方面,如果String是可变的,那么同时运行的其他线程如果修改这个值,就有可能导致混乱。总结:本文主要介绍了Java语言里面String类型为什么设计成不可变类型,以及分析了不可变类型的带来的主要优势,需要注意的是虽然不可变类型能够带来不少的好处,但并不是说其没有弊端,不可变类型的每一次修改都需要在内存中新生成一个对象,从另一个方面说针对经常变化的对象是不适合使用不可变类型的,这也是为什么Java里面还提供了可修改值的StringBuilder和StringBuffer类,这在实际开发中常常是需要根据具体情况权衡的。
    来自:
    浏览:204
  • String类为什么被设计为不可变的?

    从哪看出来String类是不可变的?this : new String(value, beginIndex, subLen);}为什么String被设置为不可变的?字符串常量池字符串常量池可以节省大量的内存空间。如果String类可变就不可能有字符串常量池字符串常量池放在哪?jdk1.7之前的不讨论,从jdk1.7开始,字符串常量池就开始放在堆中,然后本文的所有内容都是基于jdk1.8的下面这个代码还是经常被问到的String str1 = abc;String str2的key由于String类不可变的特性,所以经常被用作HashMap的key,如果String类是可变的,内容改变,hashCode也会改变,当根据这个key从HashMap中取的时候有可能取不到value
    来自:
    浏览:116
  • 为什么String在Java中是不可变的

    String 在 Java 中是不可变的。 不可变类只是一个无法修改其实例的类。 创建实例时,将初始化实例中的所有信息,并且无法修改信息。 不可变类有许多优点。本文总结了为什么 String 设计为不可变的。 这篇文章从内存,同步和数据结构的角度说明了不变性概念。1. 字符串池字符串池(String intern pool)是方法区域中的特殊存储区域。String string1 = abcd;String string2 = abcd;如下图所示:?如果字符串是可变的,则使用一个引用更改字符串将导致其他引用的错误。2.(new String(c)); for(String a: set) a.value = a;在此示例中,如果 String 是可变的,则可以更改其值,这将违反 set 的设计(set包含非重复元素)综上所诉,出于效率和安全原因,String 被设计为不可变的,这也是在一般情况下在一些情况下优选不可变类的原因。
    来自:
    浏览:202
  • String的内存模型,为什么String被设计成不可变的

    String是Java中最常用的类,是不可变的(Immutable), 那么String是如何实现Immutable呢,String为什么要设计成不可变呢?String为什么要设计成Immutable?this : new String(value, beginIndex, subLen);}如果String是可变的,即修改String的内容后,地址不变。String会在加载class的时候需要,如果String可变,那么可能会修改加载中的类。总之,安全性和String字符串常量池缓存是String被设计成不可变的主要原因。
    来自:
    浏览:510
  • String类的不可变性

    来源 | 简书| 作者 | 指尖上的榴莲一.原理(为什么说String类是不可变的)1.什么是不可变对象如果一个对象在创建之后就不能再改变它的状态,那么这个对象是不可变的(Immutable)。图24.String类不可变性的原理要理解String类的不可变性,首先看一下String类中都有哪些成员变量。也就是说,通过反射是可以修改String这种不可变对象的。二.设计目标(为什么String要设计成不可变的)在Java中,将String设计成不可变的是综合考虑到内存、同步、数据结构及安全等各种因素的结果,下文将为各种因素做一个小结。因为String对象是不可变的,所以它的值是不可改变的,否则黑客们可以钻到空子,改变String引用指向的对象的值,造成安全漏洞。
    来自:
    浏览:231
  • 【小家java】String类为什么要设计成final?不可变有什么优点?

    StringBuffer是可变的strings.字符串对象不可变让它们可以被共享。 先认识final类要了解为什么,首先我们得分析一下final修饰类,这个类有什么特点呢?类的相关方法上,提高了执行效率 这点对提高效率特别重要Java设计者认为共享带来的效率更高(比如常量池、线程池都是这个概念)设计者为什么让String被final修饰首先我们有个共识,String类绝对是被我们使用得最多的一个类使用new操作创建的字符串对象不指向字符串池中的对象 最后一句我们看到,当我们使用intern()方法后,会和池子的对象一样的效果了。因此在调用String的任何方法的时候,都采用JVM的内嵌机制,效率会有较大的提升----阐述设计成final类的优点只有当字符串是不可变的,字符串池才有可能实现字符串池的实现可以在运行时节约很多heap但如果字符串是可变的,那么String interning将不能实现(注:String interning是指对不同的字符串仅仅只保存一个,即不会保存多个相同的字符串。)
    来自:
    浏览:220
  • Java 中 String 类为什么要设计成不可变的?

    String 是 Java 中不可变的类,所以一旦被实例化就无法修改。不可变类的实例一旦创建,其成员变量的值就不能被修改。本文总结下 String 类设计成不可变的原因及好处,以及 String 类是如何设计成不可变的。String 类设计成不可变的原因及好处?其实好处就是原因,String 设计成不可变,主要是从性能和安全两方面考虑。1、常量池的需要这个方面很好理解,Java 中的字符串常量池的存在就是为了性能优化。String s1 = abc;String s2 = abc;比如引用 s1和 s2 都是指向常量池的同一个对象 abc,如果 String 是可变类,引用 s1 对 String 对象的修改,会直接导致引用3、多线程安全多线程中,可变对象的值很可能被其他线程改变,造成不可预期的结果。而不可变的 String 可以自由在多个线程之间共享,不需要同步处理。String 类是如何实现不可变的?
    来自:
    浏览:544
  • JAVA不可变类(immutable)机制与String的不可变性

    一、不可变类简介不可变类:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如JDK内部自带的很多不可变类:Interger、Long和String等。可变类:相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。二、不可变类的优点说完可变类和不可变类的区别,我们需要进一步了解为什么要有不可变类?四、String对象的不可变性string对象在内存创建后就不可改变,不可变对象的创建一般满足以上5个原则,我们看看String代码是如何实现的。五、String对象的不可变性的优缺点从上一节分析,String数据不可变类,那设置这样的特性有什么好处呢?参考资料 http:my.oschina.netzzw922cnblog487610 java的String 为什么是不可变的:http:www.codeceo.comarticlewhy-java-string-immutable.html
    来自:
    浏览:500
  • 请解释一下String为什么不可变?

    “01不可变对象是指一个对象的状态在对象被创建之后就不再变化。String 不可变是因为在 JDK 中 String 类被声明为一个 final 类,且类内部的 value 字节数组也是 final 的,只有当字符串是不可变时字符串池才有可能实现,字符串池的实现可以在运行时节约很多heap 空间,因为不同的字符串变量都指向池中的同一个字符串;如果字符串是可变的则会引起很严重的安全问题,譬如数据库的用户名密码都是以字符串的形式传入来获得数据库的连接,或者在 socket 编程中主机名和端口都是以字符串的形式传入,因为字符串是不可变的,所以它的值是不可改变的,否则黑客们可以钻到空子改变字符串指向的对象的值造成安全漏洞;因为字符串是不可变的,所以是多线程安全的,同一个字符串实例可以被多个线程共享,这样便不用因为线程安全问题而使用同步,字符串自己便是线程安全的;因为字符串是不可变的所以在它创建的时候 hashcode 就被缓存了,不变性也保证了 hash 码的唯一性,不需要重新计算,这就使得字符串很适合作为 Map 的键,字符串的处理速度要快过其它的键对象
    来自:
    浏览:1047
  • Java 中的 String 真的是不可变吗?

    我们都知道 Java 中的 String 类的设计是不可变的,来看下 String 类的源码。 ?可以看出 String 类是 final 类型的,String 不能被继承。其值 value 也就是对字符数组的封装,即 char[],其值被定义成 private final 的,说明不能通过外界修改,即不可变。String 真的 不可变 吗?来看下面这个例子。?Java中的String真的是不可变吗?所以说,这里的字符串并不是可变,只是变更了字符串引用。String 真的真的真的 不可变 吗?上面的例子肯定是不可变的,下面这个就尴尬了。?通过反射,我们改变了底层的字符数组的值,实现了字符串的 “不可变” 性,这是一种骚操作,不建议这么使用,违反了 Java 对 String 类的不可变设计原则,会造成一些安全问题。是不是又涨姿势了?
    来自:
    浏览:132
  • GPU 云服务器

    腾讯GPU 云服务器是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景……
    来自:
  • FPGA 云服务器

    腾讯FPGA云服务器是基于FPGA硬件可编程加速的弹性计算服务,您只需几分钟就可以获取并部署您的FPGA实例。结合IP市场提供的图片,视频,基因等相关领域的计算解决方案,提供无与伦比的计算加速能力……
    来自:
  • 专用宿主机

    专用宿主机(CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
    来自:
  • 黑石物理服务器2.0

    腾讯黑石物理服务器2.0(CPM)是一种包年包月的裸金属云服务,为您提供云端独享的高性能、无虚拟化的、安全隔离的物理服务器集群。使用该服务,您只需根据业务特性弹性伸缩物理服务器数量,获取物理服务器的时间将被缩短至分钟级。
    来自:

相关视频

1时8分

【TVP十日谈】- 用领域驱动设计驱动系统重构

16分52秒

小白都能懂的学算法方法!我刷了 1000 道,LeetCode 入门不难!

-

1.5为什么学习Python3而不是Python2.mp4

2分0秒

为什么用 Matplotlib

10分44秒

测试如何在团队中受到重视?

相关资讯

相关关键词

活动推荐

    运营活动

    活动名称
    广告关闭

    扫码关注云+社区

    领取腾讯云代金券