我在通过方法传递一些变量然后让该方法返回一个值时遇到问题。 checkValue
方法应该查看orderSplit
数组中的每个数组项,如果它们有错误,则返回错误消息,如果不是,则返回空errorMessage
}。但截至目前,该计划似乎根本没有执行该方法。有什么建议吗?
以下是我的代码示例:
public class Foo {
public static void main(String args[]) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String order = null;
try {
order = br.readLine();
} catch (IOException exc) {
System.out.println("ERROR: A Problem has occured");
}
String[] orderSplit = null;
orderSplit = order.split(" ");
String errorMessage = "";
checkValue(orderSplit, errorMessage);
if (errorMessage == "") {
System.out.println("SUCCESS");
}
}
public static String checkValue(String[] orderSplit, String errorMessage) {
// check the ordersplit values
return errorMessage;
}
}
答案 0 :(得分:2)
您不会将方法的结果分配给任何内容。将您的代码更改为:
String errorMessage = checkValue(orderSplit);
而不是checkValue方法不需要任何错误消息作为参数。它将自己创建一个并将其返回给调用者。
此外,将null分配给您之后立即重新分配的变量,如下所示:
String[] orderSplit = null;
orderSplit = order.split(" ");
是不必要的。你只需要
String[] orderSplit = order.split(" ");
你永远不应该将字符串与==
进行比较。 ==
测试两个变量是否引用相同的String对象。您应该使用equals()
方法,该方法测试两个字符串是否包含完全相同的字符序列:
if (errorMessage.equals("")) {
答案 1 :(得分:0)
您没有在任何地方分配checkValue的返回值,只返回其参数。尝试更改
String errorMessage = "";
checkValue(orderSplit, errorMessage);
到
String errorMessage = "";
errorMessage = checkValue(orderSplit, errorMessage);
祝你好运
答案 2 :(得分:0)
上面的代码只是将""
分配给errorMessage
变量,并返回对字符串""
的引用。这本身没有任何作用。
我假设您有一些代码在errorMessage
方法中为checkVlaue
指定了不同的值。这有一些警告。字符串在java中是不可变的。在您的邮件签名中,传递的值是一个值,其中包含对errorMessage
调用时checkValue
内容的引用。如果您尝试在checkValue
内为此变量分配另一个值并返回它,则实际上返回的值是对不同字符串对象的引用。返回到调用方法后,打印errorMessage
将打印""
,因为这是调用方法中errorMessage
仍然指向的字符串对象。如果您将通话更改为以下内容:
String errorMessage = checkValue(orderSplit);
您现在正在分配从checkedValue to
errorMessage in the calling method. This will now print whatever the result of
checkValue`返回的参考值。
net out是要记住,即使java中的大多数东西都是对象引用(指针),所有方法签名实际上都是按值传递的。重新分配时,您不会更改指针所指向的内容,而是将所有指针一起指定给变量。
答案 3 :(得分:0)
java.lang.String
是不可变的。因此,无论您对方法内的errorMessage
做什么,都不会在方法外部显示,因为基本上您正在创建新的String
对象。
你应该像其他答案所暗示的那样检查方法的返回值。