【问题标题】:Using operator + for string concatenation, since when? [closed]使用运算符 + 进行字符串连接,从什么时候开始? [关闭]
【发布时间】:2013-09-09 09:26:21
【问题描述】:

所以我的问题很简单;

  1. 谁是第一个使用加法运算符进行字符串连接的人?
  2. 如果是 Java,他们为什么决定这样做?
    • Sun 似乎明确禁止 Java 中的运算符重载,因为它允许您重新定义运算符,这打破了对该运算符的假设。
    • 然而他们决定实现一个字符串连接加法运算符,这违反了加法运算符的交换属性?

【问题讨论】:

  • 严格来说,所有算术运算符都是重载的。该语言只是不允许用户重载运算符,但语言设计者为自己保留了权利。
  • 真的会有所作为吗?
  • 我不知道,但我会试一试:文本连接中“+”的第一次用法来自第一个书面烹饪食谱,例如:“+2 个鸡蛋”。跨度>
  • @Mada:这不只是通常的加法,适用于单位的概念吗?
  • @chrylis:这样更好?

标签: java operator-overloading string-concatenation


【解决方案1】:

根据java,编写代码的程序员不能重载运算符,但就Java语言+运算符而言,它对基元(例如int和double)和String对象执行加法运算。

在像 C++ 这样支持运算符重载的语言中,您可以将 + 运算符转为执行减法,导致代码不佳。这就是 Java 设计人员不允许程序员重载运算符的情况。

在 Java 中,String 对象在 Java 中受到特殊处理,因为它们在程序中经常使用。基元存储在调用堆栈中,这需要更少的存储空间并且操作起来更便宜。另一方面,对象存储在程序堆中,需要复杂的内存管理和更多的存储空间。
出于性能原因,Java 的 String 被设计为介于原语和类之间。

字符串文字存储在一个公共池中。这有利于内容相同的字符串共享存储以节省存储空间。这也是Java设计人员认为重载+进行字符串连接以提高性能并为程序员提供便利的情况。

【讨论】:

  • 如果你定义加法运算符来执行减法,结果显然是糟糕且可维护的代码,但对我来说,我不相信,这比定义一个破坏了加法运算符要糟糕得多交换性质。这两种情况都打破了关于加法运算符行为的假设。然而我必须承认,随着时间的推移,我已经接受了这一点,作为 Java 编程语言的一部分,但起初,这对我来说确实存在缺陷,我仍然尽量避免像这样误用加法运算符。
  • 此外,如果这种做法实际上是从 Java 或其他编程语言开始的,您的回答也没有解决。
猜你喜欢
  • 1970-01-01
  • 2020-12-18
  • 2012-01-20
  • 2020-09-05
  • 2010-09-21
  • 2012-05-07
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多