课时45:String对象常量池

简介: 本次课程的主要讨论了对象池的概念及其在Java开发中的应用。首先,介绍了静态常量池和运行时常量池的区别。讨论了静态常量池和运行时常量池在实际开发中的作用,以及如何理解和应用这些概念。 1.常量池的分类2.静态常量池和运行时常量池的区别

课时45:String对象常量池

 

摘要:本次课程的主要讨论了对象池的概念及其在Java开发中的应用。首先,介绍了静态常量池和运行时常量池的区别。讨论了静态常量池和运行时常量池在实际开发中的作用,以及如何理解和应用这些概念。 

1. 常量池的分类

2. 静态常量池和运行时常量池的区别

 

对象池也称为常量池,其主要目的是实现数据的共享处理。以String对象池为例,里面的主要内容就是为了重用,而重用实际上就属于共享设计。


严格来讲,对象池所描述的就是共享。而对于正常的开发情况而言,字符串对象池的数据可以针对于所有对象进行使用。但是,在java 之中,对象池可以分为两种第一个叫做是静态常量池第二个叫运行时常量

 

01. 常量池的分类

 

静态常量池指的是程序(*.class)在加载的时候会自动将此程序之中保存的字符串还有一些普通的类和方法的信息等全部进行分配。即所有静态描述的数据都是在程序加载的时候静态分配好的。

运行时常量池指的是一个程序(*.class)加载之后里面可能有一些变量,此时提供的常量池称为运行常量池。

 

02. 静态常量池和运行时常量池的区别

 

范例:观察程序(静态常量池):如果此时进行对象的地址比较,那么结果如何?编译执行程序结果如图。

public class StringDemo {
public static void main(String args[]) {
String strA=“www.mldn.cn”;
String strB="www."+"mldn"+".cn";
System.out.println(strA=strB); // true
}
}

此时程序结果为ture,本程序之中所给出的内容全部都是静态常量数据。字符串常量都是匿名对象,所以在程序加载的时候,会自动帮助开发者处理好相应的连接,即处理完连接之后,内容存在于对象池中。

image.png

内存关系图如下。

image.png

首先,StrA 入“www.mldn.cn”,但是当进入到这个程序,前一个是程序加载后,第二部分是三个常量相加,按照程序进行处理的时候,会认为内容一致,此时也指向同一内存空间。这是一个典型的静态常量池。

范例:观察程序(运行时常量池):如果此时进行对象的地址比较,那么结果如何?编译执行程序结果如图。

public class StringDemo {
public static void main(String args[]) {
     String info=“mldn”;
String strA=“www.mldn.cn”;
String strB="www."+ info +".cn";
System.out.println(strA=strB); // true
}
}

此时代码运行的结果为false, 这个时候之所以是运行结果为 false,是因为程序在加载的时候并不确定Info 是什么内容。因为在进行字符串连接的时候Info 采用的是变量,其内容是可以修改的所以不认为最终的 StrB 的结果就是一个所需要的真实的最终结果整个程序里面这两个部分就会分配不同的空间

image.png

此时,StrB 存放在运行池的常量池里所以只要看见变量的数据的时候,即便输入的内容是一样的,那么也有可能出现不等这就我们之前给大家做过举例,如果有些数据是需要用户来输入,会发现当输入完成之后,比较的结果一定是False 因为个是静态常量池,一个是运行时常量池,这就是为什么判断地址不相等的原因。

 

相关文章
|
1月前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、"+"操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
|
1月前
|
存储 JavaScript Java
课时44:String类对象两种实例化方式比较
本次课程的主要讨论了两种处理模式在Java程序中的应用,直接赋值和构造方法实例化。此外,还讨论了字符串池的概念,指出在Java程序的底层,DOM提供了专门的字符串池,用于存储和查找字符串。 1.直接赋值的对象化模式 2.字符串池的概念 3.构造方法实例化
|
1月前
|
Java 程序员
课时16:String字符串
课时16介绍了Java中的String字符串。在Java中,字符串使用`String`类表示,并用双引号定义。例如:`String str = "Hello world!";`。字符串支持使用“+”进行连接操作,如`str += "world";`。需要注意的是,当“+”用于字符串与其他数据类型时,其他类型会先转换为字符串再进行连接。此外,字符串中可以使用转义字符(如`\t`、`\n`)进行特殊字符的处理。掌握这些基本概念对Java编程至关重要。
|
6月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
127 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
|
11月前
|
缓存 Java
Java中循环创建String对象的内存管理分析
Java中循环创建String对象的内存管理分析
101 2
|
6月前
|
存储 JavaScript 前端开发
JavaScript 字符串(String) 对象
JavaScript 字符串(String) 对象
77 3
|
8月前
|
存储 程序员 API
八股day05_API、String对象和集合
day05_API、String对象和集合
|
8月前
|
存储 Java
构造String问题之在JDK 9及更高版本中,直接访问String对象的coder和value属性,如何实现
构造String问题之在JDK 9及更高版本中,直接访问String对象的coder和value属性,如何实现
|
10月前
|
存储 缓存 安全
Java性能优化(二):Java基础-String对象及其性能优化
在深入探讨了String字符串的性能优化后,我们认识到优化字符串处理对提升系统整体性能的重要性。Java在版本迭代中,通过精心调整成员变量和内存管理机制,不断对String对象进行优化,以更高效地使用内存资源。String对象的不可变性是Java语言设计中的一个关键特性,它不仅确保了字符串的安全性,也为字符串常量池的实现提供了基础。通过减少相同值的字符串对象的重复创建,常量池有效地节约了内存空间。然而,不可变性也带来了挑战。在处理长字符串拼接时,我们需要显式使用类来避免性能下降。
141 1
String对象的特点,new创建的字符串对象地址值不同,String s3 = “abc“; s4=“abc“ sout(s1 == s2)比较地址和内容,s1.equals(s3)比较内容
String对象的特点,new创建的字符串对象地址值不同,String s3 = “abc“; s4=“abc“ sout(s1 == s2)比较地址和内容,s1.equals(s3)比较内容

热门文章

最新文章

下一篇
oss创建bucket