为什么我的代码在java中输出[email protected]?
问题描述:
按照惯例我想说明我是一个起步者,如果我不使用正确的术语,请提前抱歉。为什么我的代码在java中输出[email protected]?
我做了什么:
我创建的输出从主一个单独的类配方的方法。在主类中,我创建了一个对象来调用另一个类的方法。
从主:
Breakfast recipeName2 = new Breakfast();
recipeName2.frenchToast();
System.out.println(recipeName2);
从其他类:
public void frenchToast(){
System.out.println("\n");
StringBuilder sba = new StringBuilder("For French toast you will need:\n ");
sba.append("Eggs\n ");
sba.append("Bread\n ");
sba.append("Cinnamon\n ");
sba.append("Vanilla ");
System.out.println(sba.toString());
}
}
问题:
以为配方正确输出,由于某种原因,在它的尽头,这是也加入:成分[email protected]
我不确定它是什么或如何摆脱它。我尝试以不同的方式改变我的代码,例如改变我在参数system.out.ln()中放入的内容,但是这样会混淆我的代码。我有一种预感,这是因为某些东西正在通过别的东西传递的方式,但我试图改变我编写代码的方式,无济于事。
如果有人能帮助我,我将非常感激。自从我的代码在技术上起作用后,我会继续执行我的项目,但是我被这个难住了,并且很想知道为什么会发生这种情况。
感谢
答
你的错误是因为该行System.out.println(recipeName2);
下面我已经展示了如何在frenchToast()
和frenchToast2()
分别同时使用无效或字符串:
class Main {
public static void main(String[] args) {
Breakfast recipes = new Breakfast();
recipes.frenchToast();
System.out.println(recipes.frenchToast2());
}
}
class Breakfast {
public void frenchToast(){
StringBuilder sba = new StringBuilder("For French toast you will need:\n ");
sba.append("Eggs\n ");
sba.append("Bread\n ");
sba.append("Cinnamon\n ");
sba.append("Vanilla ");
System.out.println(sba.toString());
}
public static String frenchToast2(){
StringBuilder sba = new StringBuilder("For French toast you will need:\n ");
sba.append("Eggs\n ");
sba.append("Bread\n ");
sba.append("Cinnamon\n ");
sba.append("Vanilla ");
return(sba.toString());
}
}
等效输出:
For French toast you will need:
Eggs
Bread
Cinnamon
Vanilla
For French toast you will need:
Eggs
Bread
Cinnamon
Vanilla
试试吧here!
答
你的早餐类不会覆盖toString()
方法。因此,当您打印早餐对象时,它将使用Object::toString
方法,该方法将打印'在Java堆中位置标识符'。
回顾一下你的对象模型会更好一些,但是对于你来说简单的修复就是使FrenchToast成为一个延长早餐的类(或者如果你使早餐成为一个接口就实现),然后把字符串放到toString方法。
像这样:
public interface Breakfast {}
public class FrenchToast implements Breakfast {
@Override
public String toString() {
StringBuilder sba = new StringBuilder("For French toast you will need:\n ");
sba.append("Eggs\n ");
sba.append("Bread\n ");
sba.append("Cinnamon\n ");
sba.append("Vanilla ");
return sba.toString();
}
}
执行'System.out.println(recipeName2);'时,你会发生什么?为什么? –
只需删除一行“System.out.println(recipeName2);” 它输出对象参考“[email protected]” – keil