`
zhtw512
  • 浏览: 11018 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

NEW String

JVM 
阅读更多
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")的例子思考

    关于String s=new String( "Hello")的例子思考

    String对象创建问题

    当使用`new String()`构造函数创建`String`时,会在堆内存中创建一个新的对象。即使两个`new`操作的字符串值相同,它们也会分别创建独立的对象。例如: ```java String s3 = new String("hello"); String s4 = new ...

    【JDK】分析 String str=““ 与 new String()(csdn)————程序.pdf

    本文主要分析两种创建String对象的方式:`String str = ""` 和 `new String()`,并探讨它们之间的区别以及涉及的内存管理机制。 首先,我们要了解Java内存模型的基础概念。在Java中,内存分为两大部分:栈内存...

    Java String 和 new String()的比较与区别

    Java String 和 new String() 的比较与区别 Java 中的 String 是一个特殊的类,它有着自己的处理方式。String 和 new String() 虽然都是创建字符串对象,但是它们的实现机制和结果却有很大的区别。 首先,我们来...

    new String(\"abc\")创建几个对象的解释

    java面试的疑惑剪辑 博文链接:https://z-jq1015.iteye.com/blog/248599

    javascript asp教程第三课 new String() 构造器

    开始:new String() 是本课程计划中较早出现的另一个让人感觉到奇怪的地方。但和转义字符一样, new String()是创建一个成功的asp javascript应用的必须元素。下面是本课的两个脚本:下面是实际上承担重量的脚本:...

    浅析为什么a=”abc” 不等于 a=new String(“abc”)

    b=new String("abc") typeof b // object a==b //true a===b //false 但是为什么呢?看了很多书,问了好几个大神,其实自己还是稀里糊涂的。这里记录一下,备查。 在js中,区分原始资料类型和包装类型。数字、字符串...

    易语言JAVA对象模块

    易语言JAVA对象模块源码,JAVA对象模块,NewString,NewString_bytes,NewString_bytes_charset,NewString_bytes_offset_length,NewString_bytes_offset_length_charset,NewString_bytes_offset_length_charsetName,New...

    jni 构造字符串

    在Android中,当你需要在C/C++代码中创建Java字符串对象时,可以使用JNI提供的函数`NewString`。这个函数接受两个参数:一个`jchar`类型的数组,以及数组的长度。`jchar`是JNI中的一个类型,它对应于Java中的`char`...

    JS中‘hello’与new String(‘hello’)引出的问题详解

    使用new关键字创建对象,如 `var str2 = new String('hello');`。尽管它们看起来在日常使用中并无明显差异,但深入了解后,我们会发现它们之间存在本质区别。 首先,当我们使用`typeof`检查这三种字符串类型的变量...

    String s = new String(” a “) 到底产生几个对象?

    上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。...

    String.txt

    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转换成String数组

    - `list.toArray(new String[list.size()])`将`List<String>`中的所有元素复制到新创建的字符串数组中。 **方法二:简化版toArray()方法** ```java List<String> list = new ArrayList<String>(); list.add("a1");...

    String s = new String('a ') 到底产生几个对象

    本文将详细探讨`String s = new String('a ')`这行代码在内存中到底产生了多少个对象。 首先,我们需要了解Java内存模型中的两个关键区域:栈(Stack)和堆(Heap)。栈主要用于存储基本类型变量和对象引用,而堆则...

    String[] list 相互转化

    String[] arr = (String[]) list.toArray(new String[size]); ``` 这里的关键点在于 `list.toArray(new String[size])` 这一行代码。`toArray` 方法接受一个数组对象作为参数,并返回一个新的包含列表所有元素的...

    C#中char[]与string之间的转换 string 转换成 Char[]

    string result = string.Concat(new string[] { " A ", strOr, " B ", Environment.NewLine, " C ", strOr, " D " }); ``` 这里,我们使用string.Concat方法将string数组转换成string。 在C#中,我们还可以使用...

    C#_string_byte数组转换解析

    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 a="hello" String b="hello" a==b 返回true的问题分析

    String b=new String("hello world"); //这种用new关键字定义的字符串,是在堆中分配空间的。而分配空间就是由new去完成的,由new去决定分配多大空间,并对空间初始化为字符串"hello world" 返回其在堆上的地址。 ...

Global site tag (gtag.js) - Google Analytics