我的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;
}
}
是的,这是非法的。
因为您正在尝试添加一个对象和一个整数值,这在现实世界中是不可能的。但是当你这样做时
test1+ ""+ 100
整个事情都变成了字符串连接,当你添加一个对象和字符串时,该对象的toString方法被调用并添加到字符串中。
所以看起来你想从对象中添加一些东西到给定的值。因此,从对象中获取该值,然后将其汇总。
System.out.println(test1.getAge()+100+""); // have getAge implemented
或者,如果您想打印整个内容,请使用实现的toString,然后将其汇总。
作为旁注,当您不使用串联,而只是传递普通对象时,toString 方法将被调用并打印该对象。
System.out.println(test1);
Java不支持运算符重载,除了少数少数情况,我能想到的处理String
连接。你可以做
System.out.println(test1.toString() + 100 + "");
您的其他法律示例也涉及String
连接(当第一个术语是String
时,它会促进其他术语 - 当然String
+ Object
或 String
+ int
是唯一可能的,因为 Java 语言/运行时明确允许运算符重载String
(。
好吧,正如编译器所说,+
运算符不是为 Test1
类定义的。它仅针对String
s(串联(和数字类型(加法(定义。
如果 +
运算符的第一个操作数既不是 String
也不是数值类型,则编译器不知道该怎么做。
另一方面,如果第一个操作数是String
,编译器会将运算符视为String
串联,并通过调用toString()
将Test1
实例(第二个操作数(转换为String
。
因此
System.out.println(""+100+test1);
工程。
以下内容也有效:
System.out.println(""+test1+100);
或
System.out.println(test1.toString()+100);