Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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 什么';这是int x int y和int x,y之间的区别_Java - Fatal编程技术网

Java 什么';这是int x int y和int x,y之间的区别

Java 什么';这是int x int y和int x,y之间的区别,java,Java,在: int x; int y; 以及: 例如,在下一个代码中: public static boolean sda4(int[] arr) { for(int i=0, j=arr.length/2; i<arr.length/2 && j<arr.length; i++, j++) if(arr[i]!=arr[j]) return false; return true; } 公共静态布尔sda4(int[]arr){ 对于(i

在:

int x;
int y;
以及:

例如,在下一个代码中:

public static boolean sda4(int[] arr) {
    for(int i=0, j=arr.length/2; i<arr.length/2 && j<arr.length; i++, j++)
        if(arr[i]!=arr[j]) return false;
    return true;
}
公共静态布尔sda4(int[]arr){

对于(inti=0,j=arr.length/2;i而言,字节码术语没有差异

  • 使用多变量声明可以保存一些行,因为它们都属于相同的数据类型,因此更易于读取。在这两种情况下,保留的内存空间是相同的

  • 使用声明和变量的多个初始化,尽管您保存了行并且代码更紧凑,但读取起来可能更复杂或烦人

因此,有时代码更紧凑并不意味着质量更高

德国劳埃德船级社



让我们做一点实验,好吗?我们仔细看看三个不同的程序

Test1.java

public class Test1 {
    public static void main(String[] args) {
        int x;
        x = 1;
        int y;
        y = 2;
        System.out.println(x);
        System.out.println(y);
    }
}
public class Test2 {
    public static void main(String[] args) {
        int x = 1, y = 2;
        System.out.println(x);
        System.out.println(y);
    }
}
public class Test3 {
    public static void main(String[] args) {
        int x;
        int y;
        x = 1;
        y = 2;
        System.out.println(x);
        System.out.println(y);
    }
}
Test2.java

public class Test1 {
    public static void main(String[] args) {
        int x;
        x = 1;
        int y;
        y = 2;
        System.out.println(x);
        System.out.println(y);
    }
}
public class Test2 {
    public static void main(String[] args) {
        int x = 1, y = 2;
        System.out.println(x);
        System.out.println(y);
    }
}
public class Test3 {
    public static void main(String[] args) {
        int x;
        int y;
        x = 1;
        y = 2;
        System.out.println(x);
        System.out.println(y);
    }
}
Test3.java

public class Test1 {
    public static void main(String[] args) {
        int x;
        x = 1;
        int y;
        y = 2;
        System.out.println(x);
        System.out.println(y);
    }
}
public class Test2 {
    public static void main(String[] args) {
        int x = 1, y = 2;
        System.out.println(x);
        System.out.println(y);
    }
}
public class Test3 {
    public static void main(String[] args) {
        int x;
        int y;
        x = 1;
        y = 2;
        System.out.println(x);
        System.out.println(y);
    }
}
现在,当我们编译这三个程序(
javac Test1.java Test2.java Test3.java
)并查看生成的字节码(
javap-C Test[123]
)时,我们会看到以下内容:

javap-ctest1

Compiled from "Test1.java"
public class Test1 {
  public Test1();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: iconst_1
       1: istore_1
       2: iconst_2
       3: istore_2
       4: getstatic     #7                  // Field java/lang/System.out:Ljava/io/PrintStream;
       7: iload_1
       8: invokevirtual #13                 // Method java/io/PrintStream.println:(I)V
      11: getstatic     #7                  // Field java/lang/System.out:Ljava/io/PrintStream;
      14: iload_2
      15: invokevirtual #13                 // Method java/io/PrintStream.println:(I)V
      18: return
}
javap-ctest3

Compiled from "Test3.java"
public class Test3 {
  public Test3();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: iconst_1
       1: istore_1
       2: iconst_2
       3: istore_2
       4: getstatic     #7                  // Field java/lang/System.out:Ljava/io/PrintStream;
       7: iload_1
       8: invokevirtual #13                 // Method java/io/PrintStream.println:(I)V
      11: getstatic     #7                  // Field java/lang/System.out:Ljava/io/PrintStream;
      14: iload_2
      15: invokevirtual #13                 // Method java/io/PrintStream.println:(I)V
      18: return
}
从“Test3.java”编译而来
公共类Test3{
公共测试3();
代码:
0:aload_0
1:invokespecial#1//方法java/lang/Object。“:()V
4:返回
公共静态void main(java.lang.String[]);
代码:
0:iconst_1
1:istore_1
2:iconst_2
3:istore_2
4:getstatic#7//fieldjava/lang/System.out:Ljava/io/PrintStream;
7:iload_1
8:invokevirtual#13//方法java/io/PrintStream.println:(I)V
11:getstatic#7//fieldjava/lang/System.out:Ljava/io/PrintStream;
14:iload_2
15:invokevirtual#13//方法java/io/PrintStream.println:(I)V
18:返回
}
由于这三个类的字节码都是相同的,所以问题在于个人偏好。在Java中,通常每个变量都在自己的行上

像这样修复代码, 删除j=arr.length/2之前的“int” 因为在循环条件中不能声明多个变量类型。因为int x,y是唯一可以在循环条件中创建变量的东西

公共静态布尔sda4(int[]arr){

对于(int i=0,j=arr.length/2;
int x;int y;
和int
x,y;
之间没有真正的区别。前者更常用,至少在java中是这样。
int i=…,int j=…;
在java中没有这样的语法,这就是为什么
int x=0;int y=0
int x=0,int y=0;
看看我的回答,修复了语法错误。