【问题标题】:The operator + is undefined for the argument type(s) Test1, int运算符 + 未定义参数类型 Test1, int
【发布时间】:2018-06-30 03:47:32
【问题描述】:

我的 Java 代码没有什么问题。我正在使用下面的代码,但 Eclipse 总是提示相同的消息“操作符 + 未定义参数类型 Test1,int”。但是如果我将代码更改为“System.out.println(test1+”“+100) ;"或 "System.out.println(""+100+test1);"或者"System.out.println(100+""+test1);",没有问题。

有人知道吗?请帮忙。非常感谢;

public class Test {


public static void main(String[] args) {

Test1 test1=new Test1("abc",12);
System.out.println(test1+100+"");//this is where i got the error!
//all three lines below got no problems.
//System.out.println(test1+""+100);
//System.out.println(""+100+test1);
//System.out.println(100+""+test1);
}

}
class Test1
{
 private int age;
 private String name;
 public Test1(){}
 public Test1(String name,int age)
 {
     this.name=name;
     this.age=age;
 } 
 public String toString()
 {
     return name+""+age;

 }
 }

【问题讨论】:

  • 试试System.out.println(test1.toString() + 100 + "");
  • 你在 Test1 中实现了 toString 方法吗?如果是,请查看@pzaenger 评论

标签: java


【解决方案1】:

是的,这是非法的。

因为您正在尝试添加一个对象和一个整数值,这在现实世界中是不可能的。但是当你这样做时

test1+ ""+ 100

整个事情都变成了字符串连接,当你添加一个对象和字符串时,该对象的 toString 方法被调用并添加到字符串中。

所以看起来您想将对象中的某些内容添加到给定值。因此,从对象中获取该值,然后对其进行总结。

System.out.println(test1.getAge()+100+""); // have getAge implemented

或者,如果您想打印整个内容,请使用实现的 toString,然后对其进行总结。

附带说明,当您不使用连接,而只传递普通对象时,将调用 toString 方法并打印该对象。

System.out.println(test1); 

【讨论】:

    【解决方案2】:

    Java 不支持运算符重载除了,在少数情况下,我能想到的只是处理String 连接。你可以做到

    System.out.println(test1.toString() + 100 + "");
    

    您的其他法律示例也涉及 String 连接(当第一个术语是 String提升其他术语 - 当然还有 String + Object 或 @987654327 @ + int 是唯一可能的,因为 Java 语言/运行时明确允许 String 的运算符重载。

    【讨论】:

      【解决方案3】:

      好吧,正如编译器所说,+ 运算符没有为Test1 类定义。它只为Strings(连接)和数字类型(加法)定义。

      如果+ 运算符的第一个操作数既不是String 也不是数字类型,编译器不知道该怎么做。

      另一方面,如果第一个操作数是String,编译器会将运算符视为String 连接,并通过调用@987654330 将您的Test1 实例(第二个操作数)转换为String @。

      因此

      System.out.println(""+100+test1);
      

      有效。

      以下方法也可以:

      System.out.println(""+test1+100);
      

      System.out.println(test1.toString()+100);
      

      【讨论】:

        猜你喜欢
        • 2017-06-04
        • 1970-01-01
        • 2018-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 2014-06-02
        相关资源
        最近更新 更多