String包含几种不同的创建方式,并且不同的创建方式都会将String存到入不同的区域内,例如:String池 或者 java堆中。其中有一些原理,只要懂这些原理。以上的问题都不是问题。
原理1:当使用任何方式来创建一个字符串对象s时,Java运行时(运行中JVM)会拿着这个X在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串s,否则,不在池中添加。
原理2:Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。
原理3:使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢了!但绝不会在堆栈区再去创建该String对象。
原理4:使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象。
分享到:
相关推荐
关于String s=new String( "Hello")的例子思考
当使用`new String()`构造函数创建`String`时,会在堆内存中创建一个新的对象。即使两个`new`操作的字符串值相同,它们也会分别创建独立的对象。例如: ```java String s3 = new String("hello"); String s4 = new ...
本文主要分析两种创建String对象的方式:`String str = ""` 和 `new String()`,并探讨它们之间的区别以及涉及的内存管理机制。 首先,我们要了解Java内存模型的基础概念。在Java中,内存分为两大部分:栈内存...
Java String 和 new String() 的比较与区别 Java 中的 String 是一个特殊的类,它有着自己的处理方式。String 和 new String() 虽然都是创建字符串对象,但是它们的实现机制和结果却有很大的区别。 首先,我们来...
java面试的疑惑剪辑 博文链接:https://z-jq1015.iteye.com/blog/248599
开始:new String() 是本课程计划中较早出现的另一个让人感觉到奇怪的地方。但和转义字符一样, new String()是创建一个成功的asp javascript应用的必须元素。下面是本课的两个脚本:下面是实际上承担重量的脚本:...
b=new String("abc") typeof b // object a==b //true a===b //false 但是为什么呢?看了很多书,问了好几个大神,其实自己还是稀里糊涂的。这里记录一下,备查。 在js中,区分原始资料类型和包装类型。数字、字符串...
易语言JAVA对象模块源码,JAVA对象模块,NewString,NewString_bytes,NewString_bytes_charset,NewString_bytes_offset_length,NewString_bytes_offset_length_charset,NewString_bytes_offset_length_charsetName,New...
在Android中,当你需要在C/C++代码中创建Java字符串对象时,可以使用JNI提供的函数`NewString`。这个函数接受两个参数:一个`jchar`类型的数组,以及数组的长度。`jchar`是JNI中的一个类型,它对应于Java中的`char`...
使用new关键字创建对象,如 `var str2 = new String('hello');`。尽管它们看起来在日常使用中并无明显差异,但深入了解后,我们会发现它们之间存在本质区别。 首先,当我们使用`typeof`检查这三种字符串类型的变量...
上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。...
String b =new String("abc"); //创建字符串方式2 System.out.println(a==b); //false,内存地址不相等 String c =new String("abc"); String d =new String("abc"); System.out.println(c==d...
- `list.toArray(new String[list.size()])`将`List<String>`中的所有元素复制到新创建的字符串数组中。 **方法二:简化版toArray()方法** ```java List<String> list = new ArrayList<String>(); list.add("a1");...
本文将详细探讨`String s = new String('a ')`这行代码在内存中到底产生了多少个对象。 首先,我们需要了解Java内存模型中的两个关键区域:栈(Stack)和堆(Heap)。栈主要用于存储基本类型变量和对象引用,而堆则...
String[] arr = (String[]) list.toArray(new String[size]); ``` 这里的关键点在于 `list.toArray(new String[size])` 这一行代码。`toArray` 方法接受一个数组对象作为参数,并返回一个新的包含列表所有元素的...
string result = string.Concat(new string[] { " A ", strOr, " B ", Environment.NewLine, " C ", strOr, " D " }); ``` 这里,我们使用string.Concat方法将string数组转换成string。 在C#中,我们还可以使用...
newString = newString.Substring(0, newString.Length - 1); } int byteLength = newString.Length / 2; byte[] bytes = new byte[byteLength]; string hex; int j = 0; for (int i = 0; i < newString....
String b=new String("hello world"); //这种用new关键字定义的字符串,是在堆中分配空间的。而分配空间就是由new去完成的,由new去决定分配多大空间,并对空间初始化为字符串"hello world" 返回其在堆上的地址。 ...