我的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;
}
}
答案 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
+ Object
或String
+ 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);