当前位置:首页 » 存储配置 » string存储

string存储

发布时间: 2023-08-23 09:16:48

1. golang+存储string到longtext字段

首先,我们需要在表中定义一个长文本字段,例如:

CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
description LONGTEXT
);

然后,我们可以使用"gorm"库来将字符串存储到长文本字段中。

首先,我们需要创建一个User结构饥并并蔽灶体,如下所示:

go
type User struct {
ID uint gorm:"primary_key"
Name string gorm:"not null"
Description string gorm:"type:longtext"
}

然后,我们可以使用"gorm"库中的Create函烂迹数来将字符串存储到长文本字段中,如下所示:

go
user := User{Name: "John Doe", Description: "This is a long text string."}
db.Create(&user)

这将使数据库将字符串存储到长文本字段中。

2. java中String类型存储位置

一、new String都是在堆上创建字符串对象。
当调用 intern() 方法时,
编译器会将字符串添加到常量池中(stringTable维护),
并返回指向该常量的引用。

二、通过字面量赋值创建字符串(如:String str=”twm”)时,
会先在常量池中查找是否存在相同的字符串,若存在,
则将栈中的引用直接指向该字符串;若不存在,则在常量池中生成一个字符串,
再将栈中的引用指向该字符串。

三、常量字符串的“+”操作,
编译阶段直接会合成为一个字符串。
如string str=”JA”+”VA”,
在编译阶段会直接合并成语句String str=”JAVA”,
于是会去常量池中查找是否存在”JAVA”,从而进行创建或引用。

四、对于final字段,编译期直接进行了常量替换(而对于非final字段则是在运行期进行赋值处理的)。
final String str1=”ja”;
final String str2=”va”;
String str3=str1+str2;
在编译时,直接替换成了String str3=”ja”+”va”,根据第三条规则,
再次替换成String str3=”JAVA”

五、常量字符串和变量拼接时(如:String str3=baseStr + “01”;)
会调用stringBuilder.append()在堆上创建新的对象。

六、JDK 1.7后,intern方法还是会先去查询常量池中是否有已经存在,
如果存在,则返回常量池中的引用,这一点与之前没有区别,
区别在于,如果在常量池找不到对应的字符串,则不会再将字符串拷贝到常量池,
而只是在常量池中生成一个对原字符串的引用。简单的说,就是往常量池放的东西变了
原来在常量池中找不到时,复制一个副本放到常量池,1.7后则是将在堆上的地址引用复制到常量池。

举例说明:

String str2 = new String(“str”)+new String(“01”);
str2.intern();
String str1 = “str01”;
System.out.println(str2==str1);

在JDK 1.7下,当执行str2.intern();时,
因为常量池中没有“str01”这个字符串,所以会在常量池中生成一个对堆中的“str01”的引用
(注意这里是引用 ,就是这个区别于JDK 1.6的地方。在JDK1.6下是生成原字符串的拷贝),
而在进行String str1 = “str01”;字面量赋值的时候,常量池中已经存在一个引用,
所以直接返回了该引用,因此str1和str2都指向堆中的同一个字符串,返回true。

String str2 = new String(“str”)+new String(“01”);
String str1 = “str01”;
str2.intern();
System.out.println(str2==str1);

将中间两行调换位置以后,因为在进行字面量赋值(String str1 = “str01″)的时候,
常量池中不存在,所以str1指向的常量池中的位置,而str2指向的是堆中的对象,
再进行intern方法时,对str1和str2已经没有影响了,所以返回false。

3. String类型所接收的字符串在哪进行存储

String类型表示字符串可以分为两种方式:

  • 直接使用字符串变量接收一个字符串常量;这个字符串常量是在常量池中存储的;

  • 使用new关键字创建字符串对象,则在堆中存储。

热点内容
安卓如何避免软件一直扫描内存 发布:2025-09-08 06:52:52 浏览:282
目录c语言 发布:2025-09-08 06:41:59 浏览:991
安卓十二什么时候可以升级 发布:2025-09-08 06:27:55 浏览:654
百兆纵向加密 发布:2025-09-08 05:54:39 浏览:752
我的世界租服务器需要哪些 发布:2025-09-08 05:54:10 浏览:266
phpfileput 发布:2025-09-08 05:34:36 浏览:326
androiduipdf 发布:2025-09-08 04:36:24 浏览:532
问道手游脚本在哪买 发布:2025-09-08 04:24:04 浏览:32
安卓怎么修 发布:2025-09-08 04:23:57 浏览:949
服务器网卡与ip是否应该一致 发布:2025-09-08 04:19:40 浏览:205