赋值运算符 String 对象

2024-01-12

我是JAVA编程新手。 我在我的书上读过

String a="Hello";
String b="Hello";
System.out.println(a==b);

这应该返回false因为 a 和 b 引用 String 对象的不同实例。

因为赋值运算符比较对象的实例,但我仍然得到true.
我正在使用 Eclipse IDE。

书中的例子是这样的:

String s = "s";
String sToo = "s";
System.out.println(a == b);
System.out.println(s == sToo);

对于 s == sToo,这段代码会打印“false”。那是因为 s 和 sToo 是 对 String 对象的不同实例的引用。因此,即使它们具有相同的值, 在相等运算符眼中不相等。另外, s == “s” 打印 false,因为字符串文字 生成 String 类的另一个实例。

书名:JAVA 7 绝对初学者


这是一个称为优化字符串池 http://www.dreamincode.net/forums/topic/187631-the-string-pool/其中编译时常量字符串(又称为相同的在编译时) 可以设置为使它们实际上是内存中的同一对象(为最常用的对象类型之一节省空间)。或者用docs http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#intern%28%29;

“所有文字字符串和字符串值常量表达式都是 实习过。”

请注意,这仅适用于在编译时定义的字符串,因此以下内容确实会打印 false。

String a="Hello";
String b=new String("Hello");
System.out.println(a==b); //prints false because a new string was forced

or

String a="Hello";
String b1="He";
String b2="llo";
String b=b1+b2;

System.out.println(a==b); //prints false because b wasn't know to be "Hello" at compile time so could not use string pooling

注意:通过将 b1 和 b2 设置为最终值,可以使第二个片段打印 true,从而允许在编译时知道 b1+b2。总而言之,您需要非常小心并且相当尊重地对待 string==string,在绝大多数情况下,您需要 string.equals(string) ,但这种行为不存在。

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

赋值运算符 String 对象 的相关文章

随机推荐

  • Java 正则表达式中的 POSIX 字符等效项

    我想在Java中使用这样的正则表达式 a e i 但是Java不支持POSIX类 a e etc 我怎样才能做到这一点 更准确地说 有没有办法不使用 US ASCII Java确实支持posix 字符类 http download orac
  • 使用 micronaut-data-hibernate-jpa 库连接到 jpa 时出现错误

    我想将 JPA 用于 micronaut 为此我正在使用io micronaut data micronaut data hibernate jpa 1 0 0 M1图书馆 每当我运行应用程序并点击端点来获取数据时 我都会收到以下错误 me
  • Keycloak / SpringBoot - OpenID 配置中提供的颁发者 与请求的颁发者 不匹配

    我对我刚刚加入的项目有疑问 技术栈 Jhipster 与 Angular 和 SpringBoot Keycloak 我将正确的网址替换为 example com 和 bar com 应用程序 yaml https i stack imgu
  • Html.Action - 获取与发布

    我经常这样做 div Html Action Create Product div 这很方便 因为我可以将产品创建表单的绘制委托给另一个控制器操作以嵌入到某个位置 但是 我遇到的问题是 该方法有时 我还没有弄清楚在什么条件下 会调用我的控制
  • 我如何知道鼠标指针是否位于 HTML 元素上?

    我有一个定时事件 我想根据鼠标指针所在的 HTML 元素采取不同的行为 假设我有 HTML 元素 有没有办法知道鼠标指针当前是否位于其顶部 我很了解 onmouseover onmouseout 事件以及如何使用它们 我正在使用 JQuer
  • 多个外键?

    我有一张表 用于跟踪将产品从一个供应商运送到另一个供应商的天数和成本 我们 非常出色 p 将运输供应商 FedEx UPS 和产品处理供应商 Think Dunder Mifflin 存储在 VENDOR 表中 因此 我的 SHIPPING
  • 使用硬浮点时使用 gcc 交叉编译简单示例时出现问题

    当我尝试编译一个简单的例子时test c int main return 0 对于具有硬浮点 ABI 的 cortex m7 目标 使用以下调用 arm none eabi gcc mcpu cortex m7 mfpu fpv5 d16
  • 类型错误:res.json 不是函数

    我正在尝试发送两个 json 但它不起作用 它打印TypeError res json is not a function但我不明白为什么会发生 有什么想法吗 谢谢 app post danger function response req
  • GWT XML(xml 对象映射)

    在 Java 中 我们可以使用 JAXB 等工具自动为我们进行类对象映射 但是在 GWT 中 由于反射有限 JAXB 不可用 唯一的方法是 Document messageDom XMLParser parse messageXml Nod
  • 为什么在 CLOB 上使用 REPLACE 函数会导致 CACHE_LOBS 增加...?

    我需要在 CLOB 变量上使用内置 REPLACE 函数 作为更大的 PL SQL 流程的一部分 我使用的是 Oracle 11g R2 该函数工作正常 因为它根据需要进行替换 但随着过程运行 大约有 250 万条记录需要处理 它的速度严重
  • Prolog的append有什么问题?

    根据我大学的逻辑课程 对于以下查询 我们可以预期得到与 Prolog 定义不同的结果 append a X 统一为X a 但我不明白他们的目的是什么 考虑到附加应该统一 X 在本例中 的串联 应该期望什么作为有效响应 and a 我认为他们
  • Django 加密 url 中的主键

    我环顾四周 但仍然对如何安全地加密 django 应用程序的 url 中的主 ID 感到不舒服 我的网址如下 http www example com primary1 id primary2 id testing 例如 http www
  • 这是什么:[Ljava.lang.Object;?

    当我打电话时我得到这个toString在我从函数调用收到的对象上 我知道该字符串中编码了对象的类型 但我不知道如何读取它 这种类型的编码叫什么 Ljava lang Object 是的名字Object class the java lang
  • 不声明外键的导航属性

    我的所有模型都至少包含两个关联 在 ef4 中对此进行建模时 我只能通过使用流畅的接口在没有第二个外键属性的情况下做到这一点 foreignKey 似乎是正确使用的属性 除了它需要一个字符串参数这一事实 所以我的问题是 您可以拥有一个导航属
  • 如何检查 jq 中的 null 或空并在 jq 转换中替换空字符串

    如何检查 jq 中的 null 或空并在 jq 转换中替换空字符串 下面的 JSON 示例 这是 JQ JQ amazon items select name contains shoes as item activeItem amazon
  • Eclipse 4 RCP(又名 E4)文档

    除了 Vogella 的教程和他的书之外至少还有什么吗 这完全是基于那些言论 他的存储库中的示例通常要么不完整 未完成 无法运行 这些示例甚至与实际的书不匹配 我想为此至少找到一些javadoc 因为任何一步到了一边 我就完全迷失了如何完成
  • 使用python ctypes与nvapi交互(后续附演示代码)

    这是我之前问题的后续 有关 python ctypes 和 nvapi 的帮助 https stackoverflow com questions 6163770 help with python ctypes and nvapi 我正在发
  • 运行存储在 OneDrive 上的 php 文件

    我正在开发一个 php 项目 将项目文件存储在 OneDrive 上 以便我可以从任何地方访问它们 我已经设置了 XAMPP 带有VirtualHost指向 OneDrive 中的项目文件夹 以便我可以在浏览器中运行它 直到昨天 此功能一直
  • 向 asp.NET RadioButton 控件添加自定义属性

    我想向名为的 asp net RadioButton 添加一个自定义属性Key我正在使用客户端进行 ajax 请求 我发现我的 aspx 标记如下
  • 赋值运算符 String 对象

    我是JAVA编程新手 我在我的书上读过 String a Hello String b Hello System out println a b 这应该返回false因为 a 和 b 引用 String 对象的不同实例 因为赋值运算符比较对