当我从一个java类传递一个字符串到另一个java类时,它默认为null,为什么会发生?

问题描述 投票:-1回答:1

FORGOT.JAVA在这里我创建了一个随机数并将其转换为字符串

Random rand=new Random();
int id=rand.nextInt(10000);
System.out.printf("%04d%n",id);
final String ki=Integer.toString(id);
System.out.printf(ki);

OTP.JAVA在这里我使用了这个随机数来与用户输入进行比较..但来自forgot.java的值为null为什么它是null?

forgot ff=new forgot();
String s=ff.ki;
System.out.print(s);
if (o.compareTo(s) > 0)
     System.out.println("Strings are'nt same");
else if (o.compareTo(s) < 0)
     System.out.println("The first string is smaller than the second.");
else  
     System.out.println("Both the strings are equal.");

    //int ch=ff.ki;

     }

}
java jsp servlets
1个回答
0
投票

它看起来像是范围问题。您从FORGOT.JAVA发布的代码片段不足以确切地解决问题所在。但是你在片段中定义变量ki。因此,它不会在代码片段来自的方法/构造函数之外可用。

查看OPT.JAVA中的第二个片段,创建一个新的FORGOT,然后引用一个名为ki的字段。所以为了编译你可能有类似于FORGOT类的以下内容。

public class FORGOT {

    public String ki;

    public FORGOT() {
        Random rand=new Random();
        int id=rand.nextInt(10000);
        System.out.printf("%04d%n",id);
        final String ki=Integer.toString(id);
        System.out.printf(ki);
    }
}

虽然看起来你正在将ki设置为随机数,但实际上你在构造函数的范围内创建了一个名为ki的新变量,并将其设置为随机数。一旦构造函数返回此变量已经消失,您就不能再引用它了。

要设置公共可用变量ki,只需从设置ki的位置删除final String位。

public class FORGOT {

    public String ki;

    public FORGOT() {
        Random rand=new Random();
        int id=rand.nextInt(10000);
        System.out.printf("%04d%n",id);
        ki=Integer.toString(id);
        System.out.printf(ki);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.