「java字符串存储」java string 存储
今天给各位分享java字符串存储的知识,其中也会对java string 存储进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java中String类型存储位置
- 2、Java中如何实现用户输入多个字符串并存储在字符串数组中?
- 3、java中,字符串,如何存储?在内存中的哪个区域?
- 4、java字符串和字符串构建器内部用什么存储字符?
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。
Java中如何实现用户输入多个字符串并存储在字符串数组中?
int n = Integer.valueOf(input.nextLine().replaceAll("[^\\d]", ""));
改成这样即可;因为你的输入函数,你之前调用的它int类型方法;
改成这样,就类似你一直用的都是字符串,区别你第一次的字符串被Integer对象转成数字了;
java中,字符串,如何存储?在内存中的哪个区域?
字符串在java中是不可变序列,每一个双引号的字符串序列都是常量,存在常量池中。但String类型的对象,属于对象范畴,按对象的特性存储。
java字符串和字符串构建器内部用什么存储字符?
用StringBuffer 或者StringBuilder
String 创建一个对象 然后你对String 对象进行字符串的拼接或者其他操作会产生新的对象 也就是说两个的地址会不同 而StringBuffer和StringBuilder对字符串的改变用呢append方法,不会改变字符串的地址
关于java字符串存储和java string 存储的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-01,除非注明,否则均为
原创文章,转载请注明出处。