【问题标题】:Java, operator overloading and "+" operator for StringJava,运算符重载和字符串的“+”运算符
【发布时间】:2015-03-16 18:31:03
【问题描述】:

我对 Java 中的运算符重载有疑问。我知道 Java 不支持运算符重载,但是下面的有效 Java 程序中的“+”运算符是做什么的:

import java.util.*;
import java.lang.*;
import java.io.*;

class OperatorOverloadingTest
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String str1 = "Operator ";
        String str2 = "overloading";
        String str3 = str1+str2;

        System.out.println(str3);
    }
}

Stdout:
Operator overloading

【问题讨论】:

  • 我怀疑发帖者知道这一点,但问的是 Java 在幕后做了什么。即它是在后台调用一个函数来做+
  • @tnw:当然这是非常明显的部分:D!我想了解的是Java是否具有内置的运算符重载功能。但是,当我们说 Java 不支持运算符重载时,实际上是否意味着“Java 不允许我们使用它用于 String 的内置运算符重载功能”。
  • 我不太明白您的评论.. 但要解决您的问题,不,Java 不允许运算符重载。请看这个答案:stackoverflow.com/questions/77718/… 另外,我记得之前在某处读过,字符串连接中的“+”被广泛认为是设计缺陷。
  • 不确定它是否重复,因为问题是询问您是否可以做到,但 java 如何实现它

标签: java string operator-overloading


【解决方案1】:

这个运算符不是“重载”的,它是预定义的运算符,称为字符串连接运算符

15.18.1 字符串连接运算符+

如果只有一个操作数表达式是字符串类型,则在运行时对另一个操作数执行字符串转换(第 5.1.11 节)以生成字符串。 字符串连接的结果是对 String 对象的引用,该对象是 两个操作数字符串的连接。左侧操作数的字符 在新创建的字符串中位于右侧操作数的字符之前。

换句话说,当Java看到

String res = stringObj + someObj;

它将表达式替换为通过将现有字符串值与someObj.toString() 连接来构造结果字符串的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    相关资源
    最近更新 更多