String s = new String('a ') 到底产生几个对象
老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才!
上图红色的这3个箭头,对于通过new
产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。
也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。反之就是一个。
是的!如果面试官问到,回答一个或两个即可,但是…毕竟…毕竟
毕竟我和各位都是人才,java知识底蕴不能如此短浅,这题还没谢幕我们还能对面试官多哔哔几句:字符串常量池在不同版本的jvm中可能位置不同
那么String s=new String("a"+"b");创建了几次对象?
当jvm 看到 "a","b"时候 各创建了一次对象,"a"+"b"又创建了一个新的串,新的对象 ,new 创建了一个对象在堆,所以一共创建四次对象.
String a="sss";
这是之前我的理解 不知道对不对 大家看看评论第二条,是另一种理解。如果我们是为了应付面试可以两者结合来说,如果自己钻研 还是动手多操作看看 ~~在不同的jdk版本可能有不同的结果
例子:a="bbb";
String 不是不可变对象吗 ?是怎么赋值的呢?
String 是不可变对象,当jvm看到"sss"时把引用赋给a,当 jvm看到"bbb"的时候,又创建了新的对象 ,把新的引用返回给a,而原来的"sss"还是不变的.
到此这篇关于String s = new String(" a ") 到底产生几个对象的文章就介绍到这了,更多相关String s = new String(" a ")内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
String s = new String('a ') 到底产生几个对象
老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串("宜春")时,会先去常量池中查找是否已经有了"宜春"对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此"宜春"对象的拷贝对象. 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 "宜春" ,就是两个.反之就是一个. 是的!如果面试官
-
C#中List〈string〉和string[]数组之间的相互转换
1,从System.String[]转到List<System.String> System.String[] str={"str","string","abc"}; List<System.String> listS=new List<System.String>(str); 2, 从List<System.String>转到System.String[] List<System.Strin
-
Java String 和 new String()的比较与区别
Java String 和 new String()的区别 栈区存引用和基本类型,不能存对象,而堆区存对象.==是比较地址,equals()比较对象内容. String str1 = "abcd"的实现过程:首先栈区创建str引用,然后在String池(独立于栈和堆而存在,存储不可变量)中寻找其指向的内容为"abcd"的对象,如果String池中没有,则创建一个,然后str指向String池中的对象,如果有,则直接将str1指向"abcd"&qu
-
C# char[]与string byte[]与string之间的转换详解
1.char[]与string之间的转换 //string 转换成 Char[] string str="hello"; char[] arr=str.ToCharArray(); //Char[] 转换成 string string str1 = new string(arr); 2.byte[]与string之间的转化 string str = "你好,hello"; byte[] bytes; //byte[] 转换成 string bytes = Encod
-
Java中toString()、String.valueOf、(String)强转区别
目录 一.前言 二.代码实例 1.基本类型 2.封装类型 3.null值问题 三.源码分析 1.toString() 2.String.valueOf() 四.总结 一.前言 相信大家在日常开发中这三种方法用到的应该很多,尤其是前两种,经常在开发的时候,随心所欲,想用哪个用哪个,既然存在,那就应该有它存在的道理,那么什么情况下用哪个呢? 二.代码实例 1.基本类型 (1)基本类型没有toString()方法 (2)推荐使用 (3)无法强转 (String)是标准的类型转换,将Object类型转为
-
Java如何获取List<String>中的String详解
目录 前言 问题场景 问题讨论 解决方案 本文总结 前言 在写这篇文章之前,我几乎没有思路去定义这个问题.只是知道,List<String>是泛型,是接口List<T>的实现,实例化以后只能存储String类型的对象,仅此而已! 提到泛型,每个Java开发人员都比较熟悉.常见的List.Map<K,V>等:另外,我们在进行工具类.公共包的开发时,也经常使用泛型实现规范化.模板化的目标. 问题场景 最近,在为新系统封装公共包时遇到了一个与泛型有关的问题.在这里,结合实际场
-
Java中实现String.padLeft和String.padRight的示例
因为习惯了C#中的padLeft和padRight,接触Java后突然失去这两个功能,觉得别扭,就试着实现了这两个方法. Java中String.format()中带有字符串对齐功能如下: System.out.println(String.format("*%1$-10s*", "moon")); System.out.println(String.format("*%1$10s*", "moon")); 输出: 以上方法经
-
5分钟快速了解String.trim()到底做了什么事
目录 前言 说我们认知的trim() 复习一个小概念 养成一个好习惯 动起来,不瞎掰 示例1 示例2 示例3 示例4 示例5 示例6 5分钟直接看这里 总结 前言 项目中遇到用String.trim()的地方,点进去看了trim()源码,以前一直以为trim()的作用只是去除字符串中的首尾的"空格"符,但是源码看下来,好像这个说法不太准确呢. 搞技术嘛,严谨一些,在这记录一下,大佬们也瞅瞅哈~ 说我们认知的trim() 说到String.trim() 函数 ,就像前言说的一样,我的认知
-
C# 特殊的string类型详解
1.前言 string是属于引用类型的,这个大家都知道吧?但是平常在使用的过程中,发现它还是拥有一些值类型的特征的,这到底是为什么呢? 原因就是.Net考虑到假如大量的操作string对象的时候,大量对引用对象进行操作的时候,性能肯定不如值类型来的爽快..Net为了提高这个性能,提供了一个专门的解决方案:字符串驻留池! 2.正文 先让我们来看一段代码: string str1 = "aa"; string str2 = "a" + "a"; Co
-
Java常用类String的面试题汇总(java面试题)
1.比较两个字符串时使用"=="还是equals()方法? 当然是equals方法."=="测试的是两个对象的引用是否相同,而equals()比较的是两个字符串的值是否相等.简单来说,基本数据类型都可以使用==.而引用类型使用==比较不了. 2.如何将字符串转化成int? 使用包装类Integer.Integer.valueOf("2");其他基本数据类型都是类似 3.为什么在Java中存储密码要使用char[],而不使用String. 因为St
随机推荐
- Visual Studio 2017新版发布 更强大!
- Hibernate 主清单文件配制的详细介绍
- Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
- IOS 数据存储详解及实例代码
- Java在web页面上的编码解码处理及中文URL乱码解决
- Python中用max()方法求最大值的介绍
- android开发之调用手机的摄像头使用MediaRecorder录像并播放
- 使用navicat 8实现创建数据库和导入数据 管理用户与权限[图文方法]
- php中使用websocket详解
- Android实现ImageView图片双击放大及缩小
- 如何侦测HTTP表头信息?
- 浅谈Linux 二进制包安装MySQL的一些问题
- js实现登录验证码
- Win8.1 + CentOS7 双系统 U盘安装(超详细教程)
- JavaScript中的eval()函数详解
- Eclipse搭建spring开发环境图文教程(推荐)
- javascript+css 网页每次加载不同样式的实现方法
- JS简单实现仿百度控制台输出信息效果
- centos 6.5 oracle开机自启动的环境配置详解
- python正则表达式爬取猫眼电影top100