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



我的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 + ObjectString + 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);

最新更新