String s = "hello";

String backup_of_s = s;

s = "bye";

在这一点上,备份变量仍然包含原始值“hello”(这是因为String的不变性是什么?)。

但是它是真的安全的复制字符串与这个方法(这是当然不安全复制常规可变对象),还是最好写这个? :

String s = "hello";

String backup_of_s = new String(s);

s = "bye";

换句话说,这两个片段之间有什么区别(如果有的话)?

EDIT – 第一个代码段安全的原因:

让我根据已经提供的好的答案(基本上集中在两个片段之间的性能差异的问题),更详细地解释一些事情:

字符串在Java中是不可变的,这意味着String对象在其构造之后不能被修改。

因此,

String s =“hello”;创建一个新的String实例,并将其地址分配给s(s是对实例/对象的引用)

String backup_of_s = s;创建一个新变量backup_of_s并初始化它,以便它引用当前由s引用的对象。

注意:字符串不变性保证此对象不会被修改:我们的备份是安全的

注2:Java垃圾收集机制保证只要被至少一个变量(在这种情况下为backup_of_s)引用,这个对象不会被销毁,

最后,s =“bye”;创建另一个String实例(因为不可变性,它是唯一的方式),并修改s变量,以便它现在引用新对象。

java的字符串复制_我应该如何复制Java中的字符串?相关推荐

  1. 【Java文件操作(五)】从txt文件中读取字符串、乱码原因

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...

  2. java string 常量池_用了这么久Java String,你真的懂字符串常量池吗?

    字符串问题可谓是 Java 中经久不衰的问题,尤其是字符串常量池经常作为面试题出现.可即便是看似简单而又经常被提起的问题,还是有好多同学一知半解,看上去懂了,仔细分析起来却又发现不太明白. 本文以 J ...

  3. vector java 复制_面试官:关于Java性能优化,你有什么技巧

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化. 一般有两种 ...

  4. java jdk设置字符集_使用JDK 11在Java字符串上的新方法

    java jdk设置字符集 Java的String类似乎将在JDK 11中获得一些新方法,该方法将于2018年9月发布. 错误号 错误标题 新的String方法 描述 JDK-8200425 字符串: ...

  5. java语言特点 字符串不变_面试必问:Java中String类型为什么设计成不可变的?

    这几天在各大平台上都看到过这样一些帖子,全都是关于String类型对象不可变的问题,当然现在也是找工作的准备时期,因此花了一部分时间对其进行整理一下. 想要完全了解String,在这里我们需要解决以下 ...

  6. java azure blob 查询_快速入门:适用于 Java 的 Azure Blob 存储客户端库 v8 | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 快速入门:使用 Jav ...

  7. java青蛙过河打字_趣味算法——青蛙过河(JAVA)

    青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...

  8. java 工具类命名_排名前16的Java工具类

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  9. hashmap 复制_复杂链表的复制

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制链表的head.(注意,输出结果中请不要返回参数中的节点引用,否则判断 ...

  10. java编译器jdk版本_以编程方式确定Java类的JDK编译版本

    java编译器jdk版本 当需要确定使用哪个JDK版本来编译特定的Java .class文件时, 通常使用的方法是使用javap并在javap输出中查找列出的"主要版本". 我在我 ...

最新文章

  1. 从实际案例聊聊Java应用的GC优化
  2. EL与OGNL以及值栈的理解
  3. ABAP xml handling via SAX - 在ABAP里另一种处理xml的机制介绍
  4. weka 学习总结(持续)
  5. 自行实现高性能MVC
  6. BBIAB的完整形式是什么?
  7. MongoDB数据库查询性能提高40倍
  8. vb.net 读写文件
  9. 最优化学习笔记(十)——对偶线性规划
  10. 推荐一个wpfsliverlight的图表控件
  11. 自动关机故障常见排除法
  12. Python 网络爬虫与信息获取(一)—— requests 库的网络爬虫
  13. 在阿里云上遇见更好的Oracle(三)
  14. Mac文件管理技巧:灵活的颜色标记,更好地分类
  15. qgc地面站如何导入离线地图_【技术贴第三期】如何玩转离线地图?
  16. 【区块链基础】2——BTC区块结构
  17. 典型双层神经网络的正向/反向传播计算图
  18. PHP微信公众号开发之:获得和缓存access_token,原理及代码
  19. 再战双十一,阿里这回真的“上天”了!
  20. 新能源车电机控制器源代码资料 基于TI芯片的FOC源代码资料

热门文章

  1. 使用ffmpeg一行命令根据时间分割MP4文件
  2. Java入门第37课——猜字母游戏之设计数据结构
  3. python中的单例设计模式
  4. linux大文件分包压缩和批量解压命令tar // tar 排除指定目录
  5. Java CSV操作(导出和导入)
  6. Expanding Rods(二分)
  7. 语音信号处理基础(二)
  8. [转载] python 装饰器
  9. [转载] 用python统计中文字符数_使用Python统计字符串中各种字符的个数
  10. [转载] wikipedia 维基百科 语料 获取 与 提取 处理 by python3.5