new String(char[]) 和 char[].toString 之间的区别

2024-02-01

Java 中以下两个代码块的输出是不同的。我试图理解为什么。

private String sortChars(String s){
      char[] arr = s.toCharArray(); //creating new char[]
       Arrays.sort(arr); //sorting that array
        return new String(arr);  
    }

这会返回一个字符串,其中的字符按预期排序。

private String sortChars(String s){
      char[] arr = s.toCharArray(); //creating new char[]
       Arrays.sort(arr); //sorting that array
        return arr.toString();
    }

对不起。我的错! 用于比较两个字符串。 正如许多人所建议的那样,第二个字符串的输出看起来像这样 - [C@2e0ece65

Thanks!


在爪哇,toString在数组打印上[,然后是代表数组元素类型的字符 (C在本例中),然后是身份哈希码。所以在你的情况下,你确定它返回的是原始字符串而不是类似的东西[C@f4e6d?

无论哪种方式,你应该使用new String(arr)。这是最短、最简洁的转换方式char[]回到一个String。你也可以使用Arrays.toString(arr) http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#toString%28double%5B%5D%29

相关琐事

原因是你的arr.toString()方法返回类似的东西[Cf4e6d就是它Object.toString http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString%28%29 returns

getClass().getName() + '@' + Integer.toHexString(hashCode())

For a char array, getName()返回字符串[C。对于您的程序,您可以通过代码看到这一点:

System.out.println(arr.getClass().getName());

结果的第二部分,Object.hashCode() http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode%28%29,返回一个基于对象内存地址的数字,而不是数组内容。这是因为默认情况下,对象的“等于”定义是引用相等,即,仅当两个对象是内存中相同的引用对象时,它们才是相同的。因此你会得到不同的arr.toString()基于相同字符串的两个数组的值:

String s = "fdsa";
char[] arr = s.toCharArray();
char[] arr2 = s.toCharArray();
System.out.println(arr.toString());
System.out.println(arr2.toString());

gives:

[C@4b7c8f7f
[C@5eb10190

请注意,这对于String重写相等规则以使其具有值相等的类。但是,您应该始终使用string1.equals(string2) http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals%28java.lang.Object%29测试字符串是否相等,而不是== as the ==方法仍然会测试内存位置。

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

new String(char[]) 和 char[].toString 之间的区别 的相关文章

  • Java 错误和警告列表

    在哪里 如何获得所有 java 和 javac 的错误和警告消息的列表 This http mindprod com jgloss compileerrormessages html我认为页面是您所需要的
  • 转义字符串中的反斜杠

    我想知道什么是转义字符串中的反斜杠而不添加不必要的斜杠的好方法 我的意思是 通常如果我想转义字符串中的反斜杠 最简单的方法是使用String Replace 像这样 string s someString Replace 可以使用正则表达式
  • 使用 Spring MVC 在 jar 文件中显示 jsp 页面

    我正在使用 Spring MVC 3 2 2 在 java 中开发一个 Web 应用程序 我在从 jar 文件中加载 jsp 页面时遇到问题 Spring MVC Web应用程序具有以下结构 META INF WEB INF spring
  • Spring Data Jpa OneToMany 同时保存子实体和父实体?

    这是我的父实体 注意 为了简洁起见 删除了 getter setter lombok 注释 Entity public class Board Id GeneratedValue strategy GenerationType IDENTI
  • 如何在正则表达式中编写可选单词?

    我想编写一个识别以下模式的 java 正则表达式 abc def the ghi and abc def ghi 我试过这个 abc def the ghi 但是 它没有识别第二种模式 我哪里出错了 abc def the ghi 删除多余
  • 如何使用 aether 从 Java 找到最新版本的 Maven 工件?

    他们的文档非常薄弱 我无法弄清楚 我找到了部分答案here https stackoverflow com questions 27428068 how to retrieve the latest also snapshot versio
  • 在 doxygen 中使用 @see 或 @link

    我之前用 Javadoc 记录并使用了标签 see link or see foo and link foo 在我的描述中链接到其他课程 现在我尝试了doxygen 似乎这些标签不兼容 如果我运行 doxygen 完整的标签将被简单地解释为
  • 生成一定长度的所有排列

    假设我们有一个字母表 abcdefghiklimnop 如何以有效的方式以五个一组的形式重复该字母表来递归生成排列 几天来我一直在为此苦苦挣扎 任何反馈都会有帮助 本质上这与 生成给定字符串的所有排列 https stackoverflow
  • JFrame 在连续运行代码时冻结

    我在使用时遇到问题JFrame 它会冻结 连续运行代码 下面是我的代码 点击时btnRun 我调用了该函数MainLoop ActionListener btnRun Click new ActionListener Override pu
  • 扩展多个类

    我知道 Java 不支持多重继承 因为不允许扩展多个类 我只是想知道我的问题是否有解决方法 我有一个名为CustomAction需要扩展两个抽象类 BaseAction and QuoteBaseAction 我无法更改这些抽象类中的任何一
  • Hive:在查询中将 array 转换为 array

    我有两张桌子 create table a 1 array
  • 如何在 JmsMessagingTemplate.sendAndReceive 上设置等待超时

    我在 MVC 控制器中使用 JmsMessagingTemplate 的 sendAndReceive 但如果没有发送回复消息 它似乎会永远等待回复 该文档指出 返回 回复 如果无法接收消息 例如由于超时 则可能为 null 然而 我只是不
  • React Native v0.71.8 React-native-vector-icons 你看不到的图标

    我在用react native版本v0 71 8 我安装了react native vector icons库 但图标未显示 似乎链接在最新版本的 React Native 中不再起作用 所以我按照说明进行操作 但它不再编译 出现以下错误
  • Hybris:如何在impex中导入zip文件中的媒体?

    我知道我们可以导入未像这样压缩的图像 siteResource jar com project initialdata constants ProjectInitialDataConstants projectinitialdata imp
  • 如何通过在切片上查找来从切片复制到数组

    我正在编写一个库来处理二进制格式 我有一个带有数组变量的结构 我想保留它以用于文档目的 我还需要从输入字节片中查找和判断 一些伪代码 type foo struct boo 5 byte coo 3 byte func main input
  • 如何在一次操作中使用 Thymeleaf 检查 null 和空条件?

    有什么方法可以检查 Thymeleaf 中的 null 和empty 条件吗 方法一 1 variable1 variable2 variable3 2 variable null 3 variable 如果我们结合两个条件 例如 vari
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • FetchType.LAZY 不适用于休眠中的 @ManyToOne 映射

    简而言之 我的 Child 类与 Parent 类之间存在多对一的关系 我想加载所有的孩子 而不必加载他们的父母详细信息 我的孩子班级是 Entity public class Child implements Serializable I
  • JPA ManyToMany 产生的空联接表

    我有一个应用程序 其中我尝试使用 Hibernate 作为 JPA 提供程序来实现两个实体之间的多对多关系 我正在尝试的例子是一个单向的 其中一个相机可以有多个镜头 而镜头可以安装到多个相机中 以下是我的实体类 只需粘贴其中的相关部分 Ca

随机推荐

  • Weld/CDI 的最佳调试技巧是什么?

    Java EE 6 的优点之一是新的依赖项注入框架 具有 Weld 参考实现的 CDI 它促使我们开始以与实现无关的方式内部迁移到 JSR 330 其明确目标是能够拥有核心 jar 被冻结 然后能够添加额外的 jar 提供新的模块来替换核心
  • 删除未使用的 HTTP 处理程序以提高性能和安全性

    在哪里可以获得所有默认 IIS HTTP 处理程序的功能列表 我需要文档 我读过一些博客 出于性能和安全原因 建议删除数十个未使用的 HTTP 处理程序 例如 建议删除 TraceHandler Integrated 和 TraceHand
  • 取消使用 Hangfire.io 计划的正在运行的作业

    我使用hangfire io 库安排作业 我可以观察它在内置仪表板中的处理情况 但是 我的系统要求可以从仪表板取消该作业 有一个选项可以删除正在运行的作业 但这只会更改数据库中作业的状态 并不会停止正在运行的作业 我在文档中看到有可以通过的
  • 如何从经验分布函数中制作样本

    我正在尝试在 Python 上实现非参数引导 它需要获取一个样本 从中构建一个经验分布函数 然后从该 edf 生成一堆样本 我该怎么做 在 scipy 中 如果您知道描述它的确切公式 我只能找到如何创建自己的分布函数 但我只有一个 edf
  • 解释为什么 Array.sort 这样做

    当我们尝试对数字数组进行排序时 人们说使用这个 var numbers 4 2 5 1 3 numbers sort function a b debugger return a gt b 1 1 debugger print number
  • 在SAS中使用循环重命名索引列?

    我有一个数据集 其中变量为 col1 col2 col3 col15 我想将它们重命名为new1 new2 new3 new 15 我可以写15次类似的rename col1 new1 在 SAS 中 但如何使用循环实现此目的 谢谢 首先
  • pip install MySQL-python 返回无法找到 vcvarsall.bat

    我一直在努力pip install MySQL python在 Windows 7 上但它返回unable to find vcvarsall bat 我正在使用Python 3 4 我怎样才能以简单的方式完成这项工作 而无需经历安装 Vi
  • Android 如何查看版本

    我在 2 2 环境中完成了我的应用程序 当我在旧版本中安装我的 apk 时 我收到解析器错误 是否有可能显示我们自己的消息而不是解析器错误消息 据我看来 事实并非如此 做这样的事情 private int GetVersion int ve
  • 如何获取 std::thread() 的 Linux 线程 ID

    我正在玩std thread我想知道如何获得新的线程IDstd thread 我不是在谈论std thread id而是给予线程的操作系统 ID 您可以使用pstree 这仅供我所知 并且仅针对 Linux 平台 不需要可移植 我可以像这样
  • 阻止 jQuery 重复,示例已附

    我必须将 jQuery 附加到发票上 有时我必须批量打印多张发票 当这种情况发生时 我的每张发票都会出现完全相同的 jQuery 并且每次创建我不需要的额外元素时它都会运行 有没有办法让出现多次的 jQuery 仅在它最后一次出现在代码中时
  • 使用 SQL 查询查找最接近的匹配字符串及其子字符串

    我想编写一个查询 它将按顺序获取给定字符串及其子字符串的最接近的匹配字符串 例如 假设我有一列中包含所有名称的表 如果我想搜索名字 ATUL 那么结果应该首先列出所有匹配的不同名称 ATUL then ATU then AT 进而 A 最后
  • href 中的内联 JavaScript

    你怎么能做这样的事情 a href myLink a 并在单击链接时执行 href 中的 js 直接把JS代码放进去就可以了 a href fsljk a 不过 您不应该执行内联脚本 您应该不引人注目地附加事件处理程序 a href bla
  • 同时检测父视图和子视图的 Android-Touch 事件

    目前以下是我的应用程序的布局 LinearLayout Button ScrollView RelativeLayout EditText 我在所有这些之上创建了一个透明的 LinearLayout 实现了 OnTouchListener
  • Knockout 将键值对象绑定到下拉菜单

    我有以下型号 var allCategories id 1 name Red id 5 name Blue function model self this self name ko observable self categoryId k
  • 如何从 Google Play 开发者控制台删除草稿?

    我在 Google Play 开发者控制台上有一个测试草案 它是空的 没有 apk 文件 也没有描述 我只是创建它来检查一些东西 现在草稿就在这里 我找不到删除它的按钮 我怎样才能删除该草稿 我找不到任何有关它的文档 Thanks 1 if
  • 如何设置条件编译变量?

    在 C C 中 您可以在代码中定义宏 如下所示 define OLD WAY 1 尽管我从未这样做过 但我认为 C 中也可以实现同样的功能 更重要的是 在 C C 中 可以通过执行以下操作来执行一些条件编译逻辑 if OLD WAY 1 i
  • 多个 svn 项目合并到一个 git 存储库中?

    我已经开始使用 git svn 来完成我的一些工作 以便能够进行本地提交 这对于使用标准 svn 布局的项目非常有用 最近 我开始开发一个 Java 项目 该项目分为多个连接的模块 20 25 每个模块在同一个 svn 存储库中都有自己的根
  • 我怎样才能让 Decimal.TryParse 解析 0.0?

    有没有办法让 Decimal TryParse 将字符串值 0 0 或 00 00 或 000 000 解析为 0 我尝试将 NumberStyles 设置为 Any 使用 InvariantCulture decimal TryParse
  • 如何忽略 Subclipse 中的构建目录?

    构建后 我在自动生成的构建目录中得到了大量的类文件 我不想提交它们 所以我尝试使用忽略它们Team gt Add to svn ignore 但它们已经变灰了 我尝试删除构建目录Project gt Clean 但有趣的是 当我尝试提交时
  • new String(char[]) 和 char[].toString 之间的区别

    Java 中以下两个代码块的输出是不同的 我试图理解为什么 private String sortChars String s char arr s toCharArray creating new char Arrays sort arr