对于参数类型Test1,int,运算符+未定义

时间:2018-01-21 10:41:40

标签: java

我的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;

 }
 }

3 个答案:

答案 0 :(得分:1)

是的,这是非法的。

因为您正在尝试添加一个在现实世界中无法实现的对象和整数值。但是当你做的时候

test1+ ""+ 100

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

所以看起来你想要从对象添加一些东西到给定的值。所以从对象中获取该值然后总结它。

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

或者如果你想打印整个东西,请使用实现的toString然后总结它。

作为旁注,当你不使用连接,只是传递普通对象时,调用toString方法并打印对象。

System.out.println(test1); 

答案 1 :(得分:0)

对于一些有限的案例,Java不支持运算符重载 除了 ,我只能想到处理String串联。你可以

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

您的其他法律示例也涉及String串联(当第一个词是String时,宣传其他词语 - 当然String + ObjectString + int是唯一可能的,因为Java语言/运行时明确允许String的运算符重载。

答案 2 :(得分:0)

好吧,正如编译器所说,+类的Test1运算符没有定义。它仅为String s(串联)和数字类型(添加)定义。

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

另一方面,如果第一个操作数是String,则编译器将运算符视为String并置,并将Test1实例(第二个操作数)转换为{ {1}}致电String

因此

toString()

作品。

以下内容也适用:

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

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