gpt4 book ai didi

java - + 运算符在 Java 中如何工作?

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:25 25 4
gpt4 key购买 nike

我在下面提供了一些代码及其编译类。

public class PlusOperator {

public static void main(String[] args) {

int a=10;
int b=20;
int c =a+b;

String s1 = 1+3+"f";
String s2 = "f"+1+2;
String s3 = (1+3)+"f";
String s4 = "f"+(1+3);

}
}

用 Java 1.6 编译的类

  // Compiled from PlusOperator.java (version 1.6 : 50.0, super bit)
public class question.PlusOperator {

// Method descriptor #6 ()V
// Stack: 1, Locals: 1
public PlusOperator();
0 aload_0 [this]
1 invokespecial java.lang.Object() [8]
4 return
Line numbers:
[pc: 0, line: 3]
Local variable table:
[pc: 0, pc: 5] local: this index: 0 type: question.PlusOperator

// Method descriptor #15 ([Ljava/lang/String;)V
// Stack: 2, Locals: 8
public static void main(java.lang.String[] args);
0 bipush 10
2 istore_1 [a]
3 bipush 20
5 istore_2 [b]
6 iload_1 [a]
7 iload_2 [b]
8 iadd
9 istore_3 [c]
10 ldc <String "4f"> [16]
12 astore 4 [s1]
14 ldc <String "f12"> [18]
16 astore 5 [s2]
18 ldc <String "4f"> [16]
20 astore 6 [s3]
22 ldc <String "f4"> [20]
24 astore 7 [s4]
26 return
Line numbers:
[pc: 0, line: 7]
[pc: 3, line: 8]
[pc: 6, line: 9]
[pc: 10, line: 11]
[pc: 14, line: 12]
[pc: 18, line: 13]
[pc: 22, line: 14]
[pc: 26, line: 16]
Local variable table:
[pc: 0, pc: 27] local: args index: 0 type: java.lang.String[]
[pc: 3, pc: 27] local: a index: 1 type: int
[pc: 6, pc: 27] local: b index: 2 type: int
[pc: 10, pc: 27] local: c index: 3 type: int
[pc: 14, pc: 27] local: s1 index: 4 type: java.lang.String
[pc: 18, pc: 27] local: s2 index: 5 type: java.lang.String
[pc: 22, pc: 27] local: s3 index: 6 type: java.lang.String
[pc: 26, pc: 27] local: s4 index: 7 type: java.lang.String
}

我的问题:

  1. + 运算符如何与 String 和 int 一起使用?
  2. 如果您看到编译后的代码,则在编译时也会使用 int 评估字符串“+”,但如果是“+”,则仅在运行时执行 int。为什么?

最佳答案

ab 是变量——它们的值只有在运行时才知道1。但是,1f3 是常量,因此编译器足够智能,可以计算结果并将其包含在字节码中。因此像 3 + f 这样的表达式会自动编译为常量 3f

这与intString 类型的操作数无关。对 String 进行同样的尝试:

String str = a + b;

您会在编译后的代码中看到对 StringBuilder#append(String) 的调用。


1 一个异常(exception)是当变量被声明为final时,所以在下面的代码中:

final int a=10;
final int b=20;
int c = a + b;

c在字节码中直接赋值为30:

bipush 10
istore_1
bipush 20
istore_2
bipush 30
istore_3

关于java - + 运算符在 Java 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30899467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com