聊一聊Java字符串的不可变】的更多相关文章

前言 在 Java 开发中 String (字符串)对象是我们使用最频繁的对象,也是很重要的对象.正是使用得如此频繁,String 在实现层面上不断进行优化,从 Java6 到 Java7,再到 Java9 的新实现 ,都是为了提升 String 对象的性能,而其中不变的是 String 所生俱来的特性:不可变.本文主要聊一聊 String 的不可变,以及为什么存在的. 什么是 String 的不可变 首先我们先来看下什么是不可变对象:一旦对象被创建并初始化后,内部的状态数据就会保持不变.查看…
在逛 programcreek 的时候,发现了一些精妙绝伦的主题.比如说:为什么 Java 字符串是不可变的?像这类灵魂拷问的主题,非常值得深思. 对于绝大多数的初级程序员来说,往往停留在"知其然不知其所以然"的层面上--会用,但要说底层的原理,可就只能挠挠头双手一摊一张问号脸了. 很长一段时间内,我也一直处于这种层面上.导致的局面就是,我在挖一些高深点的技术方案时,往往束手无策:在读一些高深点的技术文章时,往往理解不了作者在说什么. 借此机会,我就和大家一起,对"为什么 J…
转自 http://developer.51cto.com/art/201503/468905.htm 本文主要来介绍一下Java中的不可变对象,以及Java中String类的不可变性,那么为什么Java的String类是不可变对象?让我们一起来分析一下. 答案一: 最流行的Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable类型? 不可变对象,顾名思义就是创…
最近,又有好几个小伙伴问我这个问题:"二哥,为什么 Java 的 String 要设计成不可变的啊?"说实话,这也是一道非常经典的面试题,面试官超喜欢问.我之前写过这方面的文章,现在读起来似乎不太满意,所以我决定再啰嗦最后一次,交出一份更满意的答卷,让小伙伴们在面试官面前更从容一些,更有底气一些. 关于不可变对象,还有这样一个小故事.Java 之父詹姆斯高司令曾在一次采访中被问及这样一个问题:"高司令,应该什么时候使用不可变对象啊?"你猜高司令怎么回答? 如有可能,…
原文链接:https://www.programcreek.com/2013/04/why-string-is-immutable-in-java/ java字符串是不可变的.不可变类只是一个不能修改实例的类.实例创建时所有的信息都被初始化,并且信息不能被修改.不可变类有许多优点.本文总结了字符串为什么被设计成不可变的原因.这说明在记忆的角度不变性的概念,同步和数据结构. 1.字符串池的要求: 字符串池(字符串特定池)是方法区域中的一个特殊存储区域.当创建字符串时,如果字符串已经存在于池中,则将…
String类不可变的好处 String是所有语言中最常用的一个类.我们知道在Java中,String是不可变的.final的.Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类. String类不可变性的好处 1.只有当字符串是不可变的,字符串池才有可能实现.字符串池的实现可以在运行时节约很多heap空间,因为不同的字符串变量都指向池中的同一个字 符串.但如果字符串是可变的, 那么String interning将不能实现(译者注:String…
Java 通过把String类设计为final使类不可继承,将变量value设置为private并且是final的,且value没有setter方法,不可修改. 为什么这么设计: 1.字符串常量池的需要.字符串常量池可以将一些字符常量放在常量池中重复使用,避免每次都重新创建相同的对象.节省存储空间.但如果字符串是可变的,此时相同内容的String还指向常量池的同一个内存空间,当某个变量改变了该内存的值时,其他遍历的值也会发生改变.所以不符合常量池设计的初衷. 2. 线程安全考虑.同一个字符串实例…
下面是Java中10个最常见的关于字符串的问题. 怎样比较字符串?使用==还是equals() 简单的说,“==”用于判断引用是否相等,equals()用于判断值是否相等.除非你要比较两个字符串是否是同一个对象,否则你应该使用equals()方法.如果你知道字符串驻留的概念会更好. 对于敏感信息优先使用字符数组而不是字符串 字符串是不可变的,意味着一旦被创建,他们就会一直存在直到垃圾回收器回收它们.然而对于一个数组来说,你可以明确的改变它们的元素.使用这种方法,敏感信息(如密码)就不会长期存在于…
转自 威哥干JAVA http://www.codingke.com 下面我为大家总结了10条Java开发者经常会提的关于Java字符串的问题,如果你也是Java初学者,仔细看看吧: 1.如何比较字符串,应该用”==”还是equals()? 总的来说,”==”是用来比较字符串的引用地址,而equals()才是比较字符串的值.两个值相同的字符串用”==”比较结果有可能是false,而用equals()则一定为true.除非两个字符串是同一个new出来的对象,不然比较字符串值是否相同应该要用equa…
(说明,该文章翻译自Top 10 questions of Java Strings) 下面是关于Java字符串最常被问到的十个问题 1.怎么去比较字符串?使用==还是使用equals()? 简单来说,"=="用来比较引用是否相等而"equals()用来比较值是否相等",除非你是要检查两个字符串的是否是相同的对象,你应该使用equals(). 如果你了解字符串截取原理的话那么就更好了. 2.为什么对于安全敏感的信息字符数组比字符串更受青睐 字符串是不可变的,这就意味…