Java:成功构建但输出为“user_package.Point@68e26d2e”

时间:2013-09-24 07:10:05

标签: java class methods

我正在学习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

我试图搜索自己,但没有找到。请告诉我问题是什么以及如何解决。

5 个答案:

答案 0 :(得分:2)

您尚未覆盖toString类的Point方法,因此调用了ObjecttoString方法。 如果您想要对对象进行有意义的文字表示,请覆盖toString

public String toString(){

   return "stringYouWantToReturn";

}

在您的情况下,将其添加到Point

public String toString() {
        return "Point [x=" + x + ", y=" + y + ", z=" + z + "]";
    }

使用println方法打印对象时,会隐式调用toString()

答案 1 :(得分:1)

写作时

 System.out.println(p3);

对您传递的对象进行toString()次调用。

由于你没有提供任何实现,

您必须在toString()课程中使用Point方法。

As per docs of toString()

  

返回对象的字符串表示形式。通常,toString方法返回一个“文本表示”此对象的字符串。

所以

 user_package.Point@68e26d2e  is the textual representation of Point class.

要获取所需的输出,请在Object类中的重写toString方法中编写逻辑并在那里返回字符串。

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);
        }

        @Override
        public String toString() {
          StringBuilder result = new StringBuilder();
             result.append(this.x).append(",");  
             result.append(this.y).append(",");
             result.append(this.z)
             return result.toString();
        }
    }

答案 2 :(得分:1)

您正在打印班级Point的对象。如果println()方法不知道如何打印类,则会打印其名称。这就是你得到这样结果的原因。

你可以这样做:

System.out.println(p3.x + ", " + p3.y + ", " + p3.z);

或者正如SURESH ATTA建议的那样,通过覆盖toString()课程的Point方法(换句话说 - 学习你的Point课程,了解当你想要打印它时的行为方式)。

答案 3 :(得分:0)

您需要覆盖toString()类中的Point函数或在Point类中创建用户定义的函数。 使用toString()方法

public class Point {

public String toString()
{
//your code goes here
return "Point "+ "X : "+ x +"Y : "+ y + "Z : "+z;
}
}

答案 4 :(得分:0)

由于之前的答案已经含蓄地说明了

  System.out.println(p3);

实际上是

  System.out.println(p3.toString());

因为您没有为toString()方法提供自己的实现。调用Object的默认实现。这导致您的给定输出。要更改该行为,您必须覆盖toString()

@Override
public String toString() {
    return "Point: x=" + x + ", y=" + y + ", z=" + z;
}