java中CharSequence和String之间的确切区别[重复]

2023-11-27

我读了这个上一篇文章。任何人都可以说出两者之间的确切区别是什么CharSequence和 String 是,除了以下事实:String实施CharSequence然后String是一个字符序列?例如:

CharSequence obj = "hello";
String str = "hello";
System.out.println("output is : " + obj + "  " + str);

当“hello”被分配给时会发生什么obj并再次到str ?


一般差异

有几个类实现了CharSequence接口除了String。其中包括

  • StringBuilder用于可以修改的可变长度字符序列
  • CharBuffer用于可以修改的固定长度的低级字符序列

任何接受a的方法CharSequence可以同样很好地处理所有这些。任何只接受一个的方法String将需要转换。所以使用CharSequence在您不关心内部结构的所有地方作为参数类型是谨慎的。但是你应该使用String作为返回类型,如果你实际上返回一个String,因为如果调用方法实际上确实需要一个返回值,则可以避免可能的转换String.

另请注意,地图应使用String作为键类型,而不是CharSequence,因为地图键不得更改。换句话说,有时事物的本质是不可改变的。String是必不可少的。

具体代码片段

至于您粘贴的代码:只需编译它,然后使用以下命令查看 JVM 字节码javap -v。在那里你会注意到两者obj and str是对同一个常量对象的引用。作为一个String是不可变的,这样的共享就可以了。

The +的运算符String被编译为各种调用StringBuilder.append来电。所以它相当于

System.out.println(
  (new StringBuilder())
  .append("output is : ")
  .append((Object)obj)
  .append(" ")
  .append(str)
  .toString()
)

我必须承认我有点惊讶我的编译器javac 1.6.0_33编译+ obj using StringBuilder.append(Object)代替StringBuilder.append(CharSequence)。前者可能涉及调用toString()对象的方法,而后者应该可以以更有效的方式实现。另一方面,String.toString()简单地返回String本身,所以那里几乎没有惩罚。所以StringBuilder.append(String)通过大约一种方法调用可能会更有效。

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

java中CharSequence和String之间的确切区别[重复] 的相关文章

  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url

随机推荐

  • 如何从列表中删除空列表(Java)

    我已经搜索过这个 但它是用其他语言编写的 例如Python或R 我在列表中有列表 我想删除空列表 例如 abc def ghi jkl mno 我想 abc def ghi jkl mno 如何从列表中删除空列表 谢谢 你也可以尝试这个 l
  • 操作码 (APC/XCache)、Zend、Doctrine 和自动加载器

    我正在尝试使用 APC 或 XCache 作为操作码来缓存我的 php 页面 我将它与 Zend 和 Doctrine 一起使用 但自动加载器出现问题 如果我尝试使用 APC 我会得到以下信息 Fatal error spl autoloa
  • 实体框架和 SQLite,终极操作方法

    我正在尝试让 Entity Framework 6 4 4 2020 年夏季的最新版本 与 SQLite 1 0 113 1 也是 2020 年夏季的最新版本 一起工作 我找到了很多关于如何执行此操作的信息 但这些信息并不总是有帮助 它们常
  • Android 模拟器实例不显示“允许 USB 调试”确认以进行身份​​验证

    我正在尝试在 Android Studio 的 Android 模拟器中运行我的移动应用程序 当我运行该应用程序时 它会提示我选择模拟器实例 当我选择模拟器实例时 应用程序的构建将启动 并且所选的模拟器将启动 构建完成后 Android S
  • 从数据框中插入 RMySQL

    我正在尝试使用 RMySQL 将数据添加到 MySQL 表 我只需要一次添加一行 但它不起作用 我想做的就是这个 dbGetQuery con INSERT INTO names VALUES data 1 1 data 1 2 所以我正在
  • 新创建的 TFS 2010 迭代不可见

    我已经在 TFS 2010 中创建了一个新的迭代 并且不想在新的故事和查询中使用它 但是 迭代不会显示在新的故事窗口中 刷新VS 重新启动VS 切换到其他项目 没有任何帮助 我是团队项目中的项目管理员 并使用我尝试使用它的同一用户创建了迭代
  • 反应原生 Flatlist 导航

    我收到错误 类型错误 无法读取未定义的属性 导航 我不明白如何将导航组件传递给每个子组件 因此当用户按下某个项目时 它可以使用 React Navigation 导航到 employeeEdit 组件 我是新手 如果这是显而易见的 我很抱歉
  • Hibernate Session 在 ConstraintViolationException 后失效

    在抛出约束违反异常后 是否有任何方法可以继续使用线程绑定的休眠会话 我在这里举一个简短的例子 Parent other service load 33 loads a new parent try Parent p new Parent p
  • 将参数传递给 PrimeFaces 星级评定组件?

    我正在尝试利用星级评定来自 PrimeFaces 的组件 但是 它不允许您传入参数 这使得我无法进行查找以从数据库中获取我想要评分的实体 我尝试过类似的事情 但没有成功
  • 在 PHP 中将标题转换为 url 兼容模式的最佳方法?

    http domain name 1 As Low As 10 Downpayment Free Golf Membership 上面的url会报告400 bad request 如何将此类标题转换为用户友好的标题good要求 您可能想使用
  • 显示/隐藏片段并以编程方式更改可见性属性

    这是一个由两部分组成的问题 我所拥有的是一个 3 片段布局 其中当用户点击另一个片段中找到的按钮时 会动态添加第三个片段 FragmentC 然后 添加后 第三个片段有一个最大化 最小化它的按钮 UPDATE 滚动到最后查看SOLUTION
  • 什么是 XML 属性 xmlns:app?

    XML 可以很好地用于 xmlns app http schemas android com apk res auto 但看不到最大字符数 xmlns app http schemas android com tools 这是由 Andro
  • 尝试将 AutoMapper 用于具有子集合的模型,在 Asp.Net MVC 3 中出现 null 错误

    我对 AutoMapper 完全陌生 我有一个如下所示的视图 using Html BeginForm null null FormMethod Post new enctype multipart form data Html Valid
  • 如何在 Windows 上用 Perl 创建图表?

    如何使用 Perl 创建图表 我正在运行创建文本报告的预定作业 我想将其移至下一步 用于管理 并创建一些与之相关的图表 这可能 可行吗 如果我能以某种方式使用 Office 来完成此操作 那就太好了 更新 我将按此顺序调查的解决方案 Spr
  • 如何使用 PHP 在给定的日期范围和时间生成 .ics 文件 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我试图找到一种有效的方法 根据给定的日期范围 开始日期 结束日期 和提醒时间 使用 PH
  • 离子3|将 InAppBrowser 添加到提供程序时遇到问题

    我需要打开一个指向我的 Ionic 3 项目的链接 当我用 google 搜索时 我看到了 InAppBrowser 插件 实际上这个链接中只有一张图片 所以如果您知道任何其他获取它的方法或直接显示这张图片 这对我来说就足够了 我所做的一切
  • 命名空间中的模板函数会导致错误

    假设以下代码 include
  • 合并DataFrame时如何合并两个列表列?

    我有两个DataFrame df1 date ids 0 2015 10 13 978 1 2015 10 14 978 121 df2 date ids 0 2015 10 13 978 12 1 2015 10 14 2 1 当我基于合
  • ImportError:无法从“jinja2”导入名称“escape”

    我收到错误 ImportError 无法从 jinja2 导入名称 escape 当尝试使用以下命令运行代码时要求 txt chart studio 1 1 0 dash 2 1 0 dash bootstrap components 1
  • java中CharSequence和String之间的确切区别[重复]

    这个问题在这里已经有答案了 我读了这个上一篇文章 任何人都可以说出两者之间的确切区别是什么CharSequence和 String 是 除了以下事实 String实施CharSequence然后String是一个字符序列 例如 CharSe