美文网首页java面试题
字符串相关题目

字符串相关题目

作者: 梁海杰_IRV | 来源:发表于2017-10-16 00:22 被阅读0次

问:String str = new String(“abc”),“abc”在内存中是怎么分配的?
问:说说String str = "hello world";String str = new String("hello world");的区别?

答: 字符串常量区、堆、对象的引用在栈中。
单纯问字符串abc当然是常量
然后new的string在堆用了常量的值
然后栈里的str值为堆区地址

在 java 的 class 文件中有专门的部分用来存储编译期间生成的字面常量和符号引用,这部分叫做 class 文件常量池,在运行期间对应着方法区的运行时常量池,所以String str = "hello world";编译期间生成了字面常量和符号引用,运行期间字面常量 "hello world" 被存储在运行时常量池(只保存了一份)。而通过 new 关键字来生成对象是在堆区进行的,堆区进行对象生成的过程是不会去检测该对象是否已经存在的,所以通过 new 来创建的一定是不同的对象,即使字符串的内容是相同的。(简单来说:字面量定义的字符串变量,在创建该对象之前,JVM会在String对象池中去搜索该字符对象是否已经被创建,如果已经被创建,则直接返回一个引用,否则先创建在返回引用。而,用new关键字创建,会创建一个新的对象并且返回一个引用。)

关于堆和栈
Java中所有由类实例化的对象和数组都存放在堆内存中,无论是成员变量,局部变量,还是类变量,它们指向的对象都存储在堆内存中。而栈内存用来存储局部变量和方法调用。
更详细的关于堆和栈的区别 http://droidyue.com/blog/2014/12/07/differences-between-stack-and-heap-in-java/

....未完...

相关文章

  • 字符串相关题目

    问:String str = new String(“abc”),“abc”在内存中是怎么分配的?问:说说Stri...

  • 『字符串』上升下降字符串1370

    题目相关 原题链接:1370. 上升下降字符串 - 力扣(LeetCode) 涉及知识:字符串、排序 题目难度:★...

  • (3)字符串相关算法题目

    在Java中,字符串是指由一连串字符组成的序列。字符串是final类,不可变,很适合作为Map中的键。stri...

  • Promise相关题目

    实现一个person对象,有eat和dinner两种方法请用实例【依次类推】new Person('Tom').s...

  • 图相关题目

    Minimum Height TreesFor a undirected graph with tree char...

  • web相关题目

    你觉得前端工程师的价值体现在哪? 为简化用户使用提供技术支持(交互部分) 为多个浏览器兼容性提供支持 为提高用户浏...

  • GCD相关题目

    1、以下代码结果会如何? 结果如下: 会造成死锁,主线程中【同步执行+主队列】,造成的互相等待。 2、写一个线程安...

  • 2019 算法面试相关(leetcode)--字符串

    字符串相关的面试题还是挺多的,主要挑一些比较经典的leetcode上的题目说下。一、反转字符串不可谓不经典。 1....

  • 算法题:超大字符串整数相加

    题目 实现两个超大字符串整数加法,字符串整数会超过 long 存储上限,不允许使用相关系统库函数直接完成。注意:整...

  • [Leetcode][String]字符串相关题目汇总/分析/总

    目录 Reverse344 Reverse String541 Reverse String II557 Reve...

网友评论

    本文标题:字符串相关题目

    本文链接:https://www.haomeiwen.com/subject/bhrhuxtx.html