在 java 里,对 string 对象进行赋值,发生什么情况呢?
package test;
public class TestStr {
private static void test02()
{
String str01 = "aaa";
System.out.println(str01);
str01 = "bbb";
System.out.println(str01);
str01 = "aaa1";
System.out.println(str01);
}
public static void main(String[] args) {
test02();
}
}
$jdk\bin\javap -verbose -private TestStr
Compiled from "TestStr.java"
public class test.TestStr extends java.lang.Object
SourceFile: "TestStr.java"
minor version: 0
major version: 50
Constant pool:
const #1 = class #2; // test/TestStr
const #2 = Asciz test/TestStr;
const #3 = class #4; // java/lang/Object
const #4 = Asciz java/lang/Object;
const #5 = Asciz <init>;
const #6 = Asciz ()V;
const #7 = Asciz Code;
const #8 = Method #3.#9; // java/lang/Object."<init>":()V
const #9 = NameAndType #5:#6;// "<init>":()V
const #10 = Asciz LineNumberTable;
const #11 = Asciz LocalVariableTable;
const #12 = Asciz this;
const #13 = Asciz Ltest/TestStr;;
const #14 = Asciz test02;
const #15 = String #16; // aaa
const #16 = Asciz aaa;
const #17 = Field #18.#20; // java/lang/System.out:Ljava/io/PrintS
tream;
const #18 = class #19; // java/lang/System
const #19 = Asciz java/lang/System;
const #20 = NameAndType #21:#22;// out:Ljava/io/PrintStream;
const #21 = Asciz out;
const #22 = Asciz Ljava/io/PrintStream;;
const #23 = Method #24.#26; // java/io/PrintStream.println:(Ljava/l
ang/String;)V
const #24 = class #25; // java/io/PrintStream
const #25 = Asciz java/io/PrintStream;
const #26 = NameAndType #27:#28;// println:(Ljava/lang/String;)V
const #27 = Asciz println;
const #28 = Asciz (Ljava/lang/String;)V;
const #29 = String #30; // bbb
const #30 = Asciz bbb;
const #31 = String #32; // aaa1
const #32 = Asciz aaa1;
const #33 = Asciz str01;
const #34 = Asciz Ljava/lang/String;;
const #35 = Asciz main;
const #36 = Asciz ([Ljava/lang/String;)V;
const #37 = Method #1.#38; // test/TestStr.test02:()V
const #38 = NameAndType #14:#6;// test02:()V
const #39 = Asciz args;
const #40 = Asciz [Ljava/lang/String;;
const #41 = Asciz SourceFile;
const #42 = Asciz TestStr.java;
{
public test.TestStr();
Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: invokespecial #8; //Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 3: 0
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this Ltest/TestStr;
private static void test02();
Code:
Stack=2, Locals=1, Args_size=0
0: ldc #15; //String aaa
2: astore_0
3: getstatic #17; //Field java/lang/System.out:Ljava/io/PrintStream;
6: aload_0
7: invokevirtual #23; //Method java/io/PrintStream.println:(Ljava/lang/St
ring;)V
10: ldc #29; //String bbb
12: astore_0
13: getstatic #17; //Field java/lang/System.out:Ljava/io/PrintStream;
16: aload_0
17: invokevirtual #23; //Method java/io/PrintStream.println:(Ljava/lang/St
ring;)V
20: ldc #31; //String aaa1
22: astore_0
23: getstatic #17; //Field java/lang/System.out:Ljava/io/PrintStream;
26: aload_0
27: invokevirtual #23; //Method java/io/PrintStream.println:(Ljava/lang/St
ring;)V
30: return
LineNumberTable:
line 7: 0
line 8: 3
line 9: 10
line 10: 13
line 11: 20
line 12: 23
line 13: 30
LocalVariableTable:
Start Length Slot Name Signature
3 28 0 str01 Ljava/lang/String;
public static void main(java.lang.String[]);
Code:
Stack=0, Locals=1, Args_size=1
0: invokestatic #37; //Method test02:()V
3: return
LineNumberTable:
line 16: 0
line 17: 3
LocalVariableTable:
Start Length Slot Name Signature
0 4 0 args [Ljava/lang/String;
}
可以看到,在常量表里生成三个常量 aaa, bbb, aaa1。
分享到:
相关推荐
C语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING....
Map<String, String> map = gson.fromJson(jsonString, new TypeToken<Map<String, String>>(){}.getType()); ``` 4. **String to Object** 如果JSON字符串代表的是一个自定义Java对象,你可以创建一个对应的类...
C#中char[]与string之间的转换 C#中char[]与string之间的转换是一种常见的操作,我们经常需要在这两种数据类型之间进行转换。今天,我们将探讨C#中char[]与string之间的转换,包括string转换成Char[]和Char[]转换成...
### C# String 的各种转换 在C#编程语言中,字符串与数字之间的转换是非常常见的操作。本文将详细介绍如何在C#中实现字符串与其他数据类型(如整数、浮点数等)之间的转换,并特别关注字符串与十六进制之间的转换。...
Java String 类型 API 测试代码 1.String和char[]之间的转换 toCharArray(); 2.String和byte[]之间的转换 getBytes() Arrays工具类 : Arrays.toString(names) String类 String replace(char oldChar, ...
标题与描述中提到的知识点是关于C#编程语言中`String`与`string`的区别,以及`string`类型的深入解析。以下是对这些知识点的详细解释: ### `String`与`string`的区别 #### 1. **位置与来源** - `String`是.NET ...
在Java编程语言中,`String`对象的创建是开发者经常遇到的问题,因为它涉及到内存管理和效率。`String`类在Java中被广泛使用,因为它代表不可变的字符序列,这使得它在很多场景下非常安全。这里我们将深入探讨`...
string 和 char* 的区别和联系 在 C++ 编程中,字符串是一种常用的数据类型,string、CString 和 char*都是字符串的 представители,每种类型都有其特点和使用场景。下面我们将详细介绍 string、...
在Java开发中,JavaBean和JsonString是两种常见的数据表示形式。JavaBean是Java对象的一种规范,用于封装数据,而JsonString是一种轻量级的数据交换格式,常用于前后端交互。本篇将深入探讨JavaBean与JsonString之间...
### List转换成String数组 在Java编程中,我们经常需要对集合进行操作,尤其是在处理大量字符串数据时。本文将详细介绍如何将一个`List<String>`类型的集合转换为`String[]`数组,并通过不同的方法来实现这一过程。...
### String[] 与 List 相互转化 在 Java 编程语言中,`String[]` 数组和 `List` 集合之间的相互转换是非常常见的需求。这两种数据结构各有优势:数组提供了固定长度且访问效率高的特性,而列表则支持动态调整大小...
本文将详细讨论如何在C++中将`double`类型的数值转换为`std::string`字符串,以及如何将`std::string`转换回`double`。我们将基于提供的`stringtodouble`工程文件进行讨论。 首先,让我们探讨`double`转`string`的...
在C++编程中,STL(Standard Template Library)的string类是用于处理文本字符串的强大工具。然而,在处理二进制数据时,需要注意string类的一些特性,因为它通常与文本字符串关联,而二进制数据可能包含特殊的字符...
根据提供的信息,我们可以总结出这份Java基础String类选择题练习题主要聚焦于String及StringBuffer类的使用。尽管具体的题目内容未给出,但从所展示的信息中可以推断出该练习题集涵盖了以下几方面的知识点: ### 一...
### List转换成String数组 在Java编程语言中,经常需要将`List<String>`类型的数据转换为`String[]`数组类型,以便于进行某些特定的操作或适应某些方法的要求。本文将详细探讨这一转换过程,并通过几个具体的示例来...
public static String[] split(String s, String regex) s参数为待拆分字符串, regex参数有两种格式: 单字符的字符串(长度1),功能如下:split(“ab#12#453”, “#”) 返回带5个元素的数组:ab, #, 12, #, 453 ...
"String型的不可变性" Java 中的 String 型是一个特殊的包装类数据,它具有不可变性。什么是不可变性呢?简单来说,就是 String 对象一旦被创建,不能被修改。那么,为什么 String 对象不能被修改呢?这就需要从 ...
在编程领域,尤其是在使用C++、Java或C#等面向对象的语言时,经常需要将字符串数组转换为单一的string类型。这种操作在处理数据输入、输出或者格式化时非常常见。下面我们将详细讨论如何在不同语言中实现这个过程,...
与此相关的,`String`对象是Java编程语言中的基础类型,用于存储和处理文本数据。在实际开发中,我们经常需要在`String`对象与JSON对象之间进行转换,以满足不同的需求。本文将深入探讨`String`与JSON的互转方法,并...
`HexString`和`Base64String`是两种常见的二进制数据的文本表示形式。理解它们的特性和转换方法对于开发人员来说是非常基础且实用的知识。 首先,`HexString`(十六进制字符串)是一种将二进制数据表示为十六进制...