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;
和intx,y;
之间没有真正的区别。前者更常用,至少在java中是这样。int i=…,int j=…;
在java中没有这样的语法,这就是为什么int x=0;int y=0
与int x=0,int y=0;
看看我的回答,修复了语法错误。