Java System.out.println(不是空字符串);打印出一个空字符串(也称为nothing)
好的,让我解释一下我的问题: 代码:Java System.out.println(不是空字符串);打印出一个空字符串(也称为nothing),java,Java,好的,让我解释一下我的问题: 代码: System.out.println(“消息是:+focusOwner+focusOwner.getPage()==null+focusOwner.getText()) 输出: false 备选代码: System.out.println(“消息为:+focusOwner”) 输出: 消息是:pscript.gui.elements.Answer[,0,98639x22,无效,layout=net.miginfocom.swing.migloayout,al
System.out.println(“消息是:+focusOwner+focusOwner.getPage()==null+focusOwner.getText())代码>
输出:
false
备选代码:
System.out.println(“消息为:+focusOwner”)代码>
输出:
消息是:pscript.gui.elements.Answer[,0,98639x22,无效,layout=net.miginfocom.swing.migloayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth。SynthBorder@677b15f3,flags=9,maximumSize=,minimumSize=,preferredSize=]
一些事实:
focusOwner是一个类Answer,它扩展了扩展JPanel的元素。toString()方法永远不会被重写。证明:
public class Answer extends Element
{
private static final long serialVersionUID = 1L;
private JLabel letter;
private JCheckBox check;
private Question question;
//getter and setters
void setQuestion(Question question)
{
this.question = question;
}
public Question getQuestion()
{
return question;
}
JLabel getLetter()
{
return letter;
}
public boolean isCorrect()
{
return check.isSelected();
}
public String getLetterText()
{
return letter.getText();
}
//navigational methods
@Override
public Element getPreviousElement()
{
Element previousElement = getQuestion().getPreviousAnswer((Answer) getElement());
if (previousElement != null)
{
return previousElement;
}
else
{
return getQuestion();
}
}
@Override
public Element getNextElement()
{
Element nextElement = getQuestion().getNextAnswer((Answer) getElement());
if (nextElement != null)
{
return nextElement;
}
else
{
nextElement = getPage().getNextElement(getQuestion());
if (nextElement != null)
{
return nextElement;
}
else
{
Page nextPage = getChapter().getNextPage(getPage());
if (nextPage != null)
{
return nextPage.getLastElement().lastElement();
}
else
{
Chapter nextChapter = getDocument().getNextChapter(getChapter());
if (nextChapter != null)
{
return nextChapter.getTitle();
}
else
{
return getDocument().getChapter(1).getTitle();
}
}
}
}
}
//other methods
private Element addNextElement()
{
if (getQuestion().getAnswerCount() < 5)
{
return addNextAnswer();
}
else
{
return addNextQuestion();
}
}
private Answer addNextAnswer()
{
Answer nextAnswer = new Answer();
getQuestion().addAnswer(nextAnswer, getQuestion().getAnswerIndex((Answer) getElement())+1);
getQuestion().rewriteLetters();
return nextAnswer;
}
private Question addNextQuestion()
{
Question nextQuestion = new Question();
getPage().addElement(nextQuestion, getPage().getElementIndex(getQuestion())+1);
getChapter().rewriteNumbers();
return nextQuestion;
}
private Element removeAnswer()
{
Element previousElement = getPreviousElement();
Question question = getQuestion();
question.removeAnswer((Answer)getElement());
question.rewriteLetters();
return previousElement;
}
private void checkLoop()
{
Question question = getQuestion();
if (question != null)
{
getDocument().setSaved(false);
if ((check.isSelected()) && (question.checkFlag == false))
{
question.checkFlag = true;
int answerCount = question.getAnswerCount();
for (int i = 1; i <= answerCount; i++)
{
question.getAnswer(i).check.setSelected(false);
}
check.setSelected(true);
question.checkFlag = false;
}
}
}
//actions
@Override
void primaryAction()
{
addNextElement().takeFocus();
}
@Override
void secondaryAction()
{
addNextQuestion().takeFocus();
}
@Override
void deleteAction()
{
removeAnswer().takeFocus();
}
//constructors
Answer()
{
super();
setBackground(Color.WHITE);
//TODO
check = new JCheckBox();
check.setBackground(Color.WHITE);
check.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent arg0)
{
checkLoop();
}
});
add(check, "top, gapleft " + LayoutConstants.CHECK_SPACE_LEFT + ", gaptop "+ LayoutConstants.CHECK_ABOVE + ", w " + LayoutConstants.CHECK_WIDTH);
letter = new JLabel("a)", SwingConstants.LEFT);
letter.setFont(Main.otherFont);
letter.setBackground(Color.WHITE);
add(letter, "top, gaptop " + LayoutConstants.LETTER_ABOVE + ", w " + LayoutConstants.LETTER_WIDTH);
getTextBox().setMargin(LayoutConstants.ANSWER_INSETS);
add(getTextBox(), "span, grow, push, w " + LayoutConstants.ANSWERBOX_WIDTH);
}
public Answer(String text, boolean correct)
{
this();
getTextBox().setText(text);
check.setSelected(correct);
}
}
getPage()返回它的一个私有变量,该变量为空或不为空(在本例中为空)
getText()调用类中包含的JTextArea的getText()方法,并返回其返回值(在本例中它实际上是一个空字符串)
在那里。这是我能给你的最接近SSCCE的东西
编辑:
你如何解释这一点:
System.out.println("Message is:" + focusOwner + focusOwner.getPage() == null + focusOwner.getText());
System.out.println("Message is:" + focusOwner);
退回此邮件:
false
Message is:pscript.gui.elements.Answer[,0,98,639x22,invalid,layout=net.miginfocom.swing.MigLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@1b2a8c70,flags=9,maximumSize=,minimumSize=,preferredSize=]
我们讨论的是同一个变量的值在两行连续的代码中被打印出来,并且它没有相同的值。假设问题是为什么
System.out.println("Message is:" + focusOwner + focusOwner.getPage() == null + focusOwner.getText());
打印false
而不是在另一种情况下得到的长字符串:
+
运算符的优先级高于=
运算符。因此,您正在打印的内容是:
("Message is:" + focusOwner + focusOwner.getPage()) == (null + focusOwner.getText())
或者两个String
对象之间相等比较的结果。显然,双方并不平等
你想要的是
System.out.println("Message is:" + focusOwner + (focusOwner.getPage() == null) + focusOwner.getText());
假设问题是为什么
System.out.println("Message is:" + focusOwner + focusOwner.getPage() == null + focusOwner.getText());
打印false
而不是在另一种情况下得到的长字符串:
+
运算符的优先级高于=
运算符。因此,您正在打印的内容是:
("Message is:" + focusOwner + focusOwner.getPage()) == (null + focusOwner.getText())
或者两个String
对象之间相等比较的结果。显然,双方并不平等
你想要的是
System.out.println("Message is:" + focusOwner + (focusOwner.getPage() == null) + focusOwner.getText());
你有什么问题?来吧。。。。你的房间在哪里?如果您无法创建sscce,那么您没有隔离您的问题。。。我们也不能,除非你强迫我们自己创建SSCCE,这对我们来说真的不公平,因为我们是志愿者,是吗?你给我们展示了字符串和布尔表达式连接的输出,以及一些对象的输出。什么也不输出(如标题所示)的情况如何?Outtputing对象是一个JPanel扩展,其toString()方法未被触及且未被覆盖。在println()方法中,它应该仍然像普通的JPanel一样工作。我无法解释我不理解的代码。我担心您在上面的解释中过度简化了复杂的代码,并且针对这个问题使用了错误的代码。请尝试找到一些方法,以尽可能小的代码重现您的问题,并将其发布在这里,或者如果绝对必要,发布在pastebin(我通常避免)。您的问题是什么?来吧。。。。你的房间在哪里?如果您无法创建sscce,那么您没有隔离您的问题。。。我们也不能,除非你强迫我们自己创建SSCCE,这对我们来说真的不公平,因为我们是志愿者,是吗?你给我们展示了字符串和布尔表达式连接的输出,以及一些对象的输出。什么也不输出(如标题所示)的情况如何?Outtputing对象是一个JPanel扩展,其toString()方法未被触及且未被覆盖。在println()方法中,它应该仍然像普通的JPanel一样工作。我无法解释我不理解的代码。我担心您在上面的解释中过度简化了复杂的代码,并且针对这个问题使用了错误的代码。请尝试找到一些方法,以尽可能小的代码重现您的问题,并将其发布在这里,或者如果绝对必要,发布在pastebin中(我通常避免使用)。现在这是一个很好的方法!非常感谢你。我想我爱你。现在这是个好机会!非常感谢你。我想我爱你。