关于String的基本认识

什么是变量名,变量名和变量的本质?

【变量】: 程序向系统申请一块内存区域存储特定数据类型,这个区域就是变量
【变量名】:是变量所在内存区域的标识符,变量有自己的内存地址为了方便开发者使用变量而引入变量名作为内存地址的别称

什么是HashCode?Java中HashCode作用是什么?

什么是HashCode(hashCode的来源)

A hash function is any function that can be used to map data of arbitrary size to fixed-size values. 【The values returned by a hash function are called hash values, hash codes】, digests, or simply hashes. The values are usually used to index a fixed-size table called a hash table. Use of a hash function to index a hash table is called hashing or scatter storage addressing. --- 维基百科

哈希码(HashCode)是将【任意数据】通过【哈希算法】转换成【固定大小、不规则的值】.

Java中HashCode的作用

HashCode是用于查找使用的,而equals是用于比较两个对象是否相等的
=====> 通过利用哈希码和哈希表可以迅速查找目标数据。

Java中hashCode方法主要作用是配合基于散列集合一起正常运行,eg: HashSet、Hashtable以及HashMap

当向集合中插入对象时,判别集合中是否已经有该对象了?(set是无序、不可重复)

假设集合中有1000个元素,现在添加1个元素:
为了保证集合无重复元素,需要将每个元素与新添加的元素比较,在1000次equals方法之后,如果新添加的元素
和集合中的元素没有重复值则直接将元素添加到集合中且在哈希表中但equals()方法的代价太大,可以通过哈希表和哈希码减少equals()方法的调用。

在Java中每创建一个对象就会根据这个对象通过哈希算法生成哈希码并与该对象在内存开辟的空间地址组合为【key(哈希码):value(持有该哈希码的内存地址)】放入哈希表中。

(1)对象A的哈希码与集合中所有对象哈希码比较如果没有重复则直接将对象A添加到集合中。
(2)对象A的哈希码与集合中某个对象哈希码相同,则调用equals()方法进行比较如果相同则禁止对象A放入集合中。
(3)对象A的哈希码与集合中某个对象哈希码相同,则调用equals()方法进行比较如果不相同则出现哈希码相同即哈希冲突,通过拉链法解决并将新对象放入集合中。

拉链法:对于hash冲突在这个Hash key的地方产生一个链表,将所有产生相同HashCode的对象放到这个单链表上去,串在一起。

Java中String类型的使用

String类型引用变量声明

String s01; // 在栈内存中声明一个名称为s01的引用变量可以执行任何String类型的堆内存

String类型通过直接量创建

String s02 = "Hello World";


[String s02 = "Hello World"]在编译器,JVM会主动到常量池中查找是否存在存在"Hello World"如果存在直接返回该区域的内存地址,否则在常量池中放入"Hello World";

String类型通过new创建

String s03 = new String("Hello World");


[String s03 = "Hello World"]在编译期,JVM会主动到常量池中查找是否存在"Hello World"如果存在直接在堆内存空间开辟内存放入"Hello World"并引用非常量池中的内存空间否则需要在创建堆内存上的
内容之后再常量池中再创建"Hello World"

String中intern()方法的作用

[intern()]-> 无论String是通过字面量创建还是通过new创建最终都要引用字符串常量池中的数据

参考:https://blog.csdn.net/SEU_Calvin/article/details/52094115

posted @   Felix_Openmind  阅读(90)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
*{cursor: url(https://files-cdn.cnblogs.com/files/morango/fish-cursor.ico),auto;}
点击右上角即可分享
微信分享提示