Java类:成功构建,但输出为“user\u包”。Point@68e26d2e"
我正在学习java并尝试执行一个简单的脚本。我有一个类Point
,如下所示:
package user_package;
public class Point {
float x;
float y;
float z;
public Point(float x, float y, float z){
this.x = x;
this.y = y;
this.z = z;
}
public static Point add(Point p1, Point p2){
return new Point(p1.x + p2.x, p1.y + p2.y, p1.z + p2.z);
}
}
然后我有这样的主文件:
import user_package.Point;
import static user_package.Point.add;
class Tutorial{
public static void main(String[] args){
float x1 = 1, y1 = 1, z1 = 1;
float x2 = 2, y2 = 2, z2 = 2;
Point p1 = new Point(x1, y1, z1);
Point p2 = new Point(x2, y2, z2);
Point p3 = add(p1, p2);
System.out.println(p3);
}
}
我在Netbeans中这样做。它没有给我错误,构建成功,但输出为:
user_package.Point@68e26d2e
我试图搜查自己,但什么也没找到。请告诉我问题是什么以及我如何解决它
# 1 楼答案
您尚未重写
Point
类的toString
方法,因此调用了Object
类toString
方法如果想要对象的有意义的文本表示,请重写toString
在您的情况下,将其添加到
Point
类中使用
println
方法打印对象时,会隐式调用toString()
# 2 楼答案
当你写作时
在您传递的对象上有
toString()
个调用因为你没有提供任何实现
必须在
Point
类中验证toString()
方法As per docs of toString()
所以
要获得所需的输出,请在对象类中的overrided
toString
方法中写入逻辑,并在其中返回字符串# 3 楼答案
您需要重写
Point
类中的toString()
函数或在Point
类中创建用户定义的函数。 使用toString()
方法# 4 楼答案
正如前面的回答已经暗示的那样
实际上是
而且因为您没有为
toString()
方法提供自己的实现。调用Object的默认实现。这将导致给定的输出。为了改变这种行为,您必须重写toString()
# 5 楼答案
您正在打印类
Point
的对象。如果println()
方法不知道如何打印类,它将打印其名称。这就是为什么你会得到这样的结果您可以这样做:
或者正如SURESH ATTA所建议的那样,通过为
Point
类重写toString()
方法(或者换句话说,学习Point
类以了解在打印它时如何操作)