String Table:Java中String类型的存储位置

Stirng的基本特征

  1. String声明为fianl,是不可被继承的;
  2. String实现了Serializable接口:字符串支持序列化;
  3. String实现了Comparable接口:String可比较大小;
  4. String在JDK8及之前存储数据使用 final char[] value, JDK9时改用 byte[],节约了一些空间

在这里插入图片描述

String内存分配

String对象创建方式

一般创建String对象有两种方式:

  • String str1 =“aa”;
  • String str2 = new String(“hello”);

其内存分配如下:

在这里插入图片描述

直接赋值:若是常量池不存在就创建并且str1直接指向常量池对应字符串;

用new方式创建:先在堆中创建一个实例对象,然后实例对象再去常量池中寻找/创建对应字符串。

String Table(字符串常量池)

String Table是真正存放字符串的地方,通过对象指针调用,StringT able中不会存放相同内容的字符串

String Table发展史

  • 内存位置
  1. jdk6及之前,String Table存放永久代中;

  2. jdk7把其中的静态变量、运算时常量池中的String Table 放到了堆中 :因为永久代的回收效率很低(full gc时才会触发)而开发中有大量字符串被创建

  • StringTable长度设置
  1. JDK6中StringTable默认长度1009,如果常量池中字符串过多就会导致效率下降;(StringTableSize设置没有要求)

  2. JDK7中StringTable长度默认600013,同样StringTableSize设置没有要求

  3. JDK8开始,StringTable不再是固定的,1009是它的最小值

将从GET参数获取的字符串类型的日期转换为Date类型存储到数据库通常需要经过几个步骤: 1. **接收和解析日期字符串**:首先,你需要从HTTP请求的GET参数获取这个字符串,然后使用合适的解析方法如`SimpleDateFormat`或`java.time.LocalDate.parse()`(取决于你使用的Java版本)来将字符串转换为`LocalDate`或`java.util.Date`对象。 示例(Java 8+): ```java String dateString = request.getParameter("date"); LocalDate date = LocalDate.parse(dateString); ``` 2. **实例化数据库连接**:使用JDBC或其他数据库API建立与数据库的连接。 3. **创建PreparedStatement**:这是为了防止SQL注入攻击,预编译SQL查询并在其插入占位符(通常是`?`)代表动态值。 4. **设置参数值**:将转换后的日期对象绑定到PreparedStatement的位置,这里通常是通过`setObject`方法。 示例(MySQL): ```java String sql = "INSERT INTO table_name (date_column) VALUES (?)"; PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setDate(1, java.sql.Date.valueOf(date)); ``` 5. **执行SQL**:最后执行PreparedStatement,保存数据到数据库。 6. **关闭资源**:记得关闭`PreparedStatement`, `Statement`, 和`Connection`以释放系统资源。 注意,不是所有数据库都直接接受`java.util.Date`或`LocalDate`类型,有些可能需要你进一步转换(如Oracle的`TO_DATE`函数)。在实际操作时,根据你的数据库驱动和配置进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值