Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将变量重新初始化为常量_Java_Variables_Switch Statement_Constants - Fatal编程技术网

Java 将变量重新初始化为常量

Java 将变量重新初始化为常量,java,variables,switch-statement,constants,Java,Variables,Switch Statement,Constants,我是Java新手。我想知道在将声明的全局变量用作变量后,是否有方法将其重新初始化为常量。。。这是因为在对声明的变量做了一些工作之后,我想在Switch case语句中使用它 class A { int x; int y; public static void main(String args[]) { A a = new A(); System.out.println(a.x); a.y = 3; a.x

我是Java新手。我想知道在将声明的全局变量用作变量后,是否有方法将其重新初始化为常量。。。这是因为在对声明的变量做了一些工作之后,我想在Switch case语句中使用它

class A {
    int x;
    int y;
    public static void main(String args[]) {
        A a = new A();

        System.out.println(a.x);
        a.y = 3;
        a.x = 5;
        switch (a.y) {
            case a.x:// Something
        }
    }
}

这是我需要的一个例子。。。print语句提到,我需要对变量x做一些事情。稍后我想在Switch case语句中使用它。我不想在switch case语句之后使用x。。。请帮帮我…

不,答案是你不能用Java做这件事

case后面的东西必须是常量。 在Java7或更高版本中,还可以使用字符串作为大小写标签


不,答案是你不能在Java中这样做

case后面的东西必须是常量。 在Java7或更高版本中,还可以使用字符串作为大小写标签


这是不可能的。若要在开关中使用某个值作为大小写,它必须是编译时已知的常量。如果要基于变量(即在运行时)进行设置,则无法在编译时知道它。

这是不可能的。若要在开关中使用某个值作为大小写,它必须是编译时已知的常量。如果要基于变量(即在运行时)设置它,则无法在编译时知道它。

只能打开编译时常量。我认为你想要实现的目标可以通过一个简单的if语句来实现

if (a.y == a.x) {
    // do stuff.
}

因为Java中的常量是编译时的,所以重新初始化作为一个概念是没有意义的。

您只能打开编译时常量。我认为你想要实现的目标可以通过一个简单的if语句来实现

if (a.y == a.x) {
    // do stuff.
}
因为Java中的常量是编译时的,所以重新初始化作为一个概念是没有意义的。

在Java中,当您编写switch语句时,编译器必须能够在编译时告诉您case选项的值是什么。如果您想设置一个开关,其中一个case选项将是运行时确定的值,很抱歉,您不能。改用if语句

传统上,其他语言中的switch语句和CASE语句用于建立跳转表。也就是说,在C程序中:

switch (n) {
    case 1:
        ...code
    case 2:
        ...code
    case 14:
        ...code
}
编译器将设置一个至少包含14个条目的表。表中的1、2和14项将包含它将跳转到的位置的代码地址。其他人将拥有默认位置的地址。那么,编译器生成的代码就不会是一系列的比较对1,如果相等,那么其他比较对2,如果相等,那么其他。。。说明的种类;相反,在确保n在表的范围内之后,它将索引到表中,找到地址,然后直接跳到那里。效率很高。Java也做了同样的事情,如果你给它一个整数来表示字符串,它可以根据哈希代码创建一个跳转表,但是它仍然需要比较字符串是否相等,这要感谢@ErwinBolwidt提供了更多的信息

然而,所有这些背后的要点是,为了生成表,编译器必须提前知道值。因此,您所要求的是不受支持的,至少在C或Java中是这样。我认为有些语言确实放松了这一点,允许在case中使用变量值,但它们可能全部或大部分都是解释语言。

在Java中,当您编写switch语句时,编译器必须能够在编译时告知case选项的值。如果您想设置一个开关,其中一个case选项将是运行时确定的值,很抱歉,您不能。改用if语句

传统上,其他语言中的switch语句和CASE语句用于建立跳转表。也就是说,在C程序中:

switch (n) {
    case 1:
        ...code
    case 2:
        ...code
    case 14:
        ...code
}
编译器将设置一个至少包含14个条目的表。表中的1、2和14项将包含它将跳转到的位置的代码地址。其他人将拥有默认位置的地址。那么,编译器生成的代码就不会是一系列的比较对1,如果相等,那么其他比较对2,如果相等,那么其他。。。说明的种类;相反,在确保n在表的范围内之后,它将索引到表中,找到地址,然后直接跳到那里。效率很高。Java也做了同样的事情,如果你给它一个整数来表示字符串,它可以根据哈希代码创建一个跳转表,但是它仍然需要比较字符串是否相等,这要感谢@ErwinBolwidt提供了更多的信息

然而,所有这些背后的要点是,为了生成表,编译器必须提前知道值。因此,您所要求的是不受支持的,至少在C或Java中是这样。我认为有些语言确实放松了这一点,并允许在这种情况下使用变量值,但它们可能全部或大部分都是解释语言

我想知道在将声明的全局变量用作变量后,是否有方法将其重新初始化为常量

不,我在那里
没有。Java也没有全局变量;查看代码,x和y是实例数据成员。Java最接近全局变量的是公共类中的公共静态[aka class]数据成员

这是因为在对声明的变量做了一些工作之后,我想在Switch case语句中使用它

如果案例值a.x(在您的案例中)不是常量,则无法执行此操作。相反,您必须使用if/else if/else:

我想知道在将声明的全局变量用作变量后,是否有方法将其重新初始化为常量


不,没有。Java也没有全局变量;查看代码,x和y是实例数据成员。Java最接近全局变量的是公共类中的公共静态[aka class]数据成员

这是因为在对声明的变量做了一些工作之后,我想在Switch case语句中使用它

如果案例值a.x(在您的案例中)不是常量,则无法执行此操作。相反,您必须使用if/else if/else:


我认为你不能在案例陈述中使用a.x甚至a.getX。它只接受常量。是的。。。这就是我想做的。。。我想在case语句中使用a.x。。。因此,我想将其重新初始化为常量。。。我的问题是,有没有办法做到这一点?是的,不要使用,如果elseif elseca你不能使int x;最终?也需要是静态的…?我认为你不能在案例陈述中使用a.x甚至a.getX。它只接受常量。是的。。。这就是我想做的。。。我想在case语句中使用a.x。。。因此,我想将其重新初始化为常量。。。我的问题是,有没有办法做到这一点?是的,不要使用,如果elseif elseca你不能使int x;最终?还需要是静态的…?Java也没有全局变量;静态变量不是全局变量吗?@虽然它们不是,但公共静态变量更接近全局变量,但它们仍然不是全局变量和可用变量everywhere@whiletrue:如果类中的类是公共的,则类中的公共静态数据成员几乎是全局的。Java也没有全局变量;静态变量不是全局变量吗?@虽然它们不是,但公共静态变量更接近全局变量,但它们仍然不是全局变量和可用变量everywhere@whiletrue:如果类中的类是公共的,则类中的公共静态数据成员接近全局。Java还为整数创建跳转表,但对于字符串,请参见:@ErwinBolwidt感谢您的链接。我想也许它可以使用散列码;我只是不确定它是否真的有。是的,我知道了。。。这只是一个观点。。。如果java可以开发为在switch case语句中使用变量,那将非常有用。java还为整数和字符串创建跳转表,请参见:@ErwinBolwidt感谢链接。我想也许它可以使用散列码;我只是不确定它是否真的有。是的,我知道了。。。这只是一个观点。。。如果java可以开发为在switch-case语句中使用变量,那将非常有用。是的,但我想通过使用switch-case语句使它变得简单。是的,但我想通过使用Switch Case语句使它变得简单。现在我觉得我做不到。