Java传递变量并返回值

时间:2012-06-23 22:09:14

标签: java methods

我在通过方法传递一些变量然后让该方法返回一个值时遇到问题。 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;
    }
}

4 个答案:

答案 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对象。

你应该像其他答案所暗示的那样检查方法的返回值。

相关问题