Java中StringTable的理解

StringTable

定义

俗称串池,用于存储字符串类型的引用。


存储位置

JDK1.6的时候存储在永久代的常量池中,JDK1.8为了提高回收效率,把StringTable存放在堆中。


结构

存储结构为HashTable,也就是数组+链表的形式,不允许扩容。

使用Hash值来确定元素应该放在数组的哪一个位置,当Hash值相同时称为哈希冲突,这时首先判断hash值相同的元素是否相同,如果是的话拒绝插入,如果不是的话则会在链表中插入元素。


特性

  • 字符串会延迟加载,执行到该代码的时候才会加载到StringTable中
  • 利用串池机制防止重复创建字符串对象
  • 变量拼接的原理是StringBuilder
  • 常量拼接的原理是编译器优化

创建String两种方式的区别

使用new String()创建字符串变量

  1. 查找串池中是否有该字符串的值,串池没有该值,则在串池中新增这个字符串的值,然后在堆中创建该对象
  2. 查找串池中是否有该字符串的值,串池已经存在该值,直接在堆中创建该对象

使用String a = "xx"创建字符串变量

查找串池是否存在该字符串对象,没有的话在串池新增该字符串的值,有的话直接引用串池里面的对象。

注意事项

两个字符串变量拼接会调用StringBuilder的toString方法,相等于使用new创建,因此该字符串对象会放入堆里面。但是由于这是动态拼接,不会放入StringTable(new String的参数是一个常量的时候会放入StringTable中)


intern方法

作用

尝试把该字符串对象放入串池当中,如果没有则直接放入,如果串池当中存在相同的值,则不会把该对象放入,返回串池中的对象。(针对jdk1.8)

jdk1.6如果串池没有该对象的话,会复制一个新的对象再放入串池


性能优化

  • 字符串常量较多的话,把StringTable的桶数量增加,可以提高效率(调整-XX:StringTableSize参数)
  • 使用入池不可重复的机制,减少字符串重复浪费内存
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java,使用JDBC操作MySQL数据库进行增删改查可以遵循以下步骤: 1. 导入必要的JDBC类库和MySQL驱动。 2. 建立与数据库的连接,通常使用`Connection`对象来表示连接。 3. 创建一个`Statement`对象,用于执行SQL语句。 4. 编写SQL语句,包括插入、删除、更新和查询等操作。 5. 使用`Statement`对象的相应方法执行SQL语句,并获取返回的结果(如果有)。 6. 处理结果,根据需要进行相应的操作。 下面是一些具体的例子: 1. 插入数据: ```java String sql = "INSERT INTO userinfo (username, password) VALUES ('刘德华', '123456')"; statement.executeUpdate(sql); ``` 2. 删除数据: ```java String sql = "DELETE FROM userinfo WHERE id = 1"; statement.executeUpdate(sql); ``` 3. 更新数据: ```java String sql = "UPDATE userinfo SET password = '654321' WHERE id = 1"; statement.executeUpdate(sql); ``` 4. 查询数据: ```java String sql = "SELECT * FROM userinfo"; ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()) { int id = resultSet.getInt("id"); String username = resultSet.getString("username"); String password = resultSet.getString("password"); System.out.println("ID: " + id + ", Username: " + username + ", Password: " + password); } ``` 请注意,在执行这些操作之前,需要先建立与数据库的连接,并确保数据库和表已经创建。例如,可以使用如下代码创建数据库和表: ```java String createDatabase = "CREATE DATABASE yebuxiu_jdbc"; String createTable = "CREATE TABLE userinfo (id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(10), password VARCHAR(10))"; statement.executeUpdate(createDatabase); statement.executeUpdate("USE yebuxiu_jdbc"); statement.executeUpdate(createTable); ``` 希望这些例子能够帮助你理解Java如何使用MySQL进行增删改查操作。如有疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值