当我们可以创建 String s = "abc" 时,需要什么 String s = new String("abc")

2024-01-01

据我的理解

String s = new String("abc")将创建两个对象 -

  1. 字符串常量池中的一个(如果"abc"尚未在常量池中)
  2. 堆内存中的一个

尽管对于实际将创建多少对象以及在何处创建存在多种理解。

无论如何,我有以下问题 -

  1. 为什么 String 类的 java 文档中没有介绍将创建多少个对象以及在哪里创建?
  2. Why new String(String)无论如何,在 String 类中提供了字符串是不可变的?。还可以假设所有字符串,由任一创建String s = "abc" or String s = new String("abc"),将在字符串常量池中可用?
  3. 用于创建或附加的字符串文字StringBuilder or StringBuffer,它们也进入字符串常量池还是仅保留在堆内存中。

Edit

java 文档用于intern()方法清楚地谈论了常量池,但是 没有这样说String(String).


为什么 String 类的 java 文档中没有介绍将创建多少个对象以及在哪里创建?

它被覆盖在字符串文档 http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

String 类表示字符串。 Java 程序中的所有字符串文字(例如“abc”)都是作为此类的实例实现的。 字符串是恒定的;它们的值在创建后就无法更改。字符串缓冲区支持可变字符串。因为 String 对象是不可变的,所以它们可以共享。例如:

 String str = "abc";

相当于:

 char data[] = {'a', 'b', 'c'};
 String str = new String(data);

并从Java语言规范 https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.3.3

String 对象具有常量(不变)值。

字符串文字(第 3.10.5 节)是对 String 类实例的引用。

并从JSL#3.10.5。字符串文字 https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.5

此外,字符串文字始终引用 String 类的同一个实例。这是因为字符串文字 - 或者更一般地说,作为常量表达式值的字符串(第 15.28 节) - 被“保留”,以便使用 String.intern 方法共享唯一实例。

.

如果字符串是不可变的,为什么在 String 类中无论如何都会提供 new String(String) ?还可以假设由 String s = "abc" 或 String s = new String("abc") 创建的所有字符串都会可以在字符串常量池中使用吗?

由于 String 是对象,因此声明的有效方式是

String s = new String("abc");

但是哪里String s = "abc";是出于其他原因而设计的

Java的设计者决定在面向对象的语言中保留原始类型,而不是把一切都变成对象,以提高语言的性能。

因为它是最有用的类,出于性能原因,Java 的 String 被设计为介于基元和类之间。

在 StringBuilder 或 StringBuffer 中创建或附加的字符串文字,它们是否也进入字符串常量池或仅保留在堆内存中。

考虑这个例子

StringBuilder sb = new StringBuilder("abc");

字面意思"abc"常量池和对象中可用sb在堆中创建。

尝试阅读我的旧答案:如何使用“”来初始化字符串? https://stackoverflow.com/questions/17489250/how-can-a-string-be-initialized-using/17489410#17489410

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我们可以创建 String s = "abc" 时,需要什么 String s = new String("abc") 的相关文章

  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b
  • 当客户端关闭连接时,Spring StreamingResponseBody 请求线程未清理

    我在控制器中有一个端点 它返回一个StreamingResponseBody 用于向客户端发送文件 其代码大致如下 RestController RequestMapping value api public class Controlle
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 使用 JUnit 时,有没有办法验证测试方法中是否调用了 try/catch 指令的 Catch 部分?

    例如 如果我想测试以下课程 public class SomeClass public void someMethod try Some code where comething could go wrong catch Exception
  • 将 numpy 代码点数组与字符串相互转换

    我有一个很长的 unicode 字符串 alphabet range 0x0FFF mystr join chr random choice alphabet for in range 100 mystr re sub W mystr 我想
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 使用 Guice 优化注册表

    你好 今天思考了一种优化 有一些疑问 语境 我正在使用 Guice 2 进行 Java 开发 在我的网络应用程序中 我有一个转换器注册表 可以即时转换为某种类型 转换器描述如下 public class StringToBoolean im
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • 如何在 Java 中创建接受多个值的单个注释

    我有一个名为 Retention RetentionPolicy SOURCE Target ElementType METHOD public interface JIRA The Key Bug number JIRA referenc
  • Java中HashMap和ArrayList的区别?

    在爪哇 ArrayList and HashMap被用作集合 但我不明白我们应该在哪些情况下使用ArrayList以及使用时间HashMap 他们两者之间的主要区别是什么 您具体询问的是 ArrayList 和 HashMap 但我认为要完
  • 将 Apache Camel 执行器指标发送到 Prometheus

    我正在尝试转发 添加 Actuator Camel 指标 actuator camelroutes 将交换 交易数量等指标 发送到 Prometheus Actuator 端点 有没有办法让我配置 Camel 将这些指标添加到 Promet

随机推荐

  • 在 ASP.NET MVC 中显示另一个控制器的视图

    是否可以显示另一个控制器的视图 比如说我有一个CategoriesController and a Category NotFound aspx看法 当在CategoriesController 我可以轻松返回View NotFound 现
  • 在 WooCommerce 中显示每个购物车商品的重量

    我正在使用 Woocommerce 并尝试在购物车页面上显示每个产品的产品重量 我用过这个 add action woocommerce cart collaterals myprefix cart extra info function
  • 通过重写URL访问Couchdb数据库URL,带有查询参数

    我的网站用完了 Couch DB 实例 因此我将我的虚拟主机配置为指向 dbname design app rewrite 我希望能够从 Web 浏览器访问索引页面 同时仍然通过 Ajax 访问 Couch DB API 因此我在我的文件中
  • 单击 UISegmentedControl 的一段后显示多行文本,但最初不是 - 更新代码

    我需要在每个段中设置多行文本UISegmentedControl 我尝试了下面的代码 它工作正常 但问题是 当第一次加载页面时 第一次显示分段控件时 它不显示多行文本 但是当我单击其中一段 文本以多行显示 如何解决这个问题 这是代码 voi
  • 实例方法中的静态变量

    假设我有这个程序 class Foo public unsigned int bar static unsigned int counter 0 return counter int main Foo a Foo b 当然这个例子没有任何意
  • python中access数据库表的读写

    我有一个访问数据库 里面是我创建的几张桌子 我想使用 python 读取其中一个表并列出一列中的所有内容 我想将该列表与程序中已创建的另一个列表进行比较 如果该数字与列表中的数字匹配 则在我制作的访问电子表格的同一行新列中输出 是 同样 如
  • MySQL 查询 - 每组最近的条目

    我正在尝试选择表中每组的最新条目 假设我有一个表 blog posts 其中有一列 id 全部唯一 自动递增 post cat 可以是值 category1 或 category2 或 category3 以及一个 publish stat
  • 如何提高 ASP.NET MVC 中从 SQL Server 数据库获取数据的速度 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是 ASP NET MVC5 的新手 我有一个模型Shipping and my dbo Shippings sql是这样的 CRE
  • 检查函数是否被调用为装饰器

    在下面的最小示例中decorate被调用两次 第一次使用 decorate 第二个通过正常函数调用decorate bar def decorate func print func name return func decorate def
  • 在 NetworkX 中合并两个加权图

    我使用 python 多重处理来创建多个不同的 NetworkX 图 然后使用下面的函数来组合这些图 然而 虽然这个函数对于小图工作得很好 但对于较大的图 它会使用大量内存 并且会挂在我的系统和内存密集型 AWS 系统上 仅使用系统中总内存
  • 交换两列 - awk、sed、python、perl

    我有一个大文件中的数据 280 列宽 700 万行长 我需要交换前两列 我想我可以使用某种 awk for 循环来执行此操作 打印 2 1 然后打印到文件末尾的范围 但我不知道如何执行范围部分 而且我无法打印 2 1 美元 3 美元 280
  • 在 API 加载之前在 Cordova 中显示 webView

    我正在使用 PhoneGap Cordova 构建适用于 iOS 和 Android 的应用程序 按照标准行为 在 JavaScript 初始化并且 Cordova API 准备就绪之前 不会显示 webView 所以直到我打电话 docu
  • jquery 添加类到这个被点击的元素

    我生成几行 tr 与任务 现在 可以通过单击某个任务将每个任务标记为完成span 我通过 ajax 请求来做到这一点 这是 HTML table tr td 1 td td span class icon complete a to hea
  • foreach 循环和 stdclass 对象

    我在这里看到了类似的问题 但我似乎无法将解决方案应用于我的问题 我有一个名为 results 的变量 它是从 API 获得的 我将更改专有名词以保护我工作的客户 stdClass Object out gt stdClass Object
  • Laravel 混合编译依赖

    我正在尝试使用vuex 模块装饰器 https github com championswimmer vuex module decoratorsLaravel Mix 项目中的库 使用 TypeScript 但我不断收到错误Uncaugh
  • 比较两个 OpenCV 图像/2D Numpy 数组

    我刚开始使用 OpenCV Python 和 Numpy 但已经成为 Java C C 程序员有一段时间了 我正在实现一个 sigma delta 背景检测器 它执行以下操作 设 i1 为第一张图像 设 i2 为第二张图像 for each
  • 将字节数组插入 List 的最简洁方法?

    在某些代码中 我正在创建一个字节列表 并希望在构建它时将一个字节数组插入到该列表中 这样做最干净的方法是什么 请参阅下面的代码 谢谢 public class ListInsert public static byte getData re
  • 安装 MvcScaffolding 包时 NuGet 执行策略错误

    我在项目中使用 Visual Web Developer Express 2010 Windows XP 和 ASP NET MVC4 RC 我安装了 NuGet v2 0 30619 9119 我现在尝试通过 NuGet 包管理器控制台安
  • 在运行脚本的页面上查找 xpath

    我正在尝试使用硒抓取网页 通过检查页面并右键单击建议的 xpath 属于不稳定类型 html body table 2 tbody tr 1 td form table tbody tr 2 所以我尝试了以下解决方案 driver webd
  • 当我们可以创建 String s = "abc" 时,需要什么 String s = new String("abc")

    据我的理解 String s new String abc 将创建两个对象 字符串常量池中的一个 如果 abc 尚未在常量池中 堆内存中的一个 尽管对于实际将创建多少对象以及在何处创建存在多种理解 无论如何 我有以下问题 为什么 Strin