Home > Java > javaTutorial > body text

How to use javap to parse Java integer constants and integer variables

不言
Release: 2018-10-22 15:39:41
forward
2829 people have browsed it

The content of this article is about how to use javap to parse Java integer constants and integer variables. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

The fifth and ninth lines of my code below define an integer variable and an integer constant respectively:

static final int number1 = 512;
static int number3 = 545;
Copy after login

Java programmers all know the difference between the two.

How to use javap to parse Java integer constants and integer variables

Next we will use javap to decompile the .class file and then delve into the difference between integer variables and integer constants in Java.

Use the command line javap -c constant.ConstantFolding to view the bytecode decompiled from the .class file:

How to use javap to parse Java integer constants and integer variables

Result:

How to use javap to parse Java integer constants and integer variables

The description of these bytecode instructions is explained in wikipedia:

wiki: https://en.wikipedia .org/wiki...

We Java programmers don’t need to memorize them all. We only need to save this web page and use it as a dictionary when we need it:

How to use javap to parse Java integer constants and integer variables

sipush 545: Place the integer 545 on the stack

putstatic #16:

Assign the value 545 on the stack to the current class in the static field.

How to use javap to parse Java integer constants and integer variables

So what does #16 in putstatic #16 mean?

If we use javap -v parameter to decompile, we can see the constant pool of this class (Constant pool). Look at the blue highlighted line in the picture below:

constant/ConstantFolding .number3:I

Description #16 represents member number3 of class constant.ConstantFolding, type is I.

How to use javap to parse Java integer constants and integer variables

At this point, these two lines of bytecode instructions are combined and actually correspond to the Java code we wrote:

static int number3 = 545;
Copy after login

We Continue to analyze the bytecode decompiled by javap.

How to use javap to parse Java integer constants and integer variables

aload_0: Load the introduction of local variables with serial number 0 onto the stack

invokespecial: Invoke members on the object instance Method, if there is a return value, the return value of the method is stored on the stack. The specific method called is identified by #, and the corresponding method name can be queried in the constant pool.

ldc: Load the value of the constant codenamed # from the constant pool onto the stack.

We can find from the constant pool list in the figure below that the constant 318976 with serial number #29 is exactly the product of the integer constant number1 (512) and the integer constant (623). It can be seen from this that the expression number1 * number2, because the two operands involved in the operation have become integer constants through STATIC and FINAL modifications, the product can be obtained at compile time, so the compiler calculates it at compile time Come out and store it in the variable pool with the sequence number #29.

How to use javap to parse Java integer constants and integer variables

So what is the corresponding bytecode for multiplication of integer variables?

Start from code number 3 in the figure below:

getstatic #16: Load the static member #16 of the class onto the stack. The corresponding member of #16 is number3 and the value is 545.

getstatic #18: Load the static member #18 of the class onto the stack. The corresponding member of #18 is number4 and the value is 619.

imul: Perform multiplication of two integers on the stack.

istore_2: Save the result to local variable 2.

At this point, the int product2 = number3 * number4 in our Java code has been executed.

The remaining blue bytecode you see corresponds to the following line of print statements.

System.out.println("Value: " + product1 + " , " + product2);
Copy after login

It can also be seen from these bytecodes that in Java we directly use the plus sign to perform string splicing operations. The Java compiler automatically uses StringBuilder for optimization when compiling.

Since the product of integer variables needs to be printed out, iload_2 of the bytecode loads the calculation result previously saved in local variable 2 with istore_2 onto the stack, so that the product result can be output at the end.

How to use javap to parse Java integer constants and integer variables

#I hope that through this simple example, everyone can learn to use javap to deeply understand some details of Java and JVM.

The above is the detailed content of How to use javap to parse Java integer constants and integer variables. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:segmentfault.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template