Java基础查漏补缺:(String篇)一个面试题问倒了我,原来String并不简单

先来一道java面试题:
String s = new String(“zsx”);
问:创建了几个String Object?

先别往下看,想想答案
先上一个图:

如图所示,问题所示的语句创建了2个String对象和一个引用。
String s = new String(“zsx”);
相当于
String s1=”zsx”;
String s=new String(s1);
“zsx”作为一个常量字符串首先被创建,它被保存在“串池”中。
所谓串池,简单讲就是从程序运行开始,你创建的所有常量字符串被统一保存的地方。在串池中已经存在”zsx”这个串的情况下,如果你需要一个内容相同的串,你不需要再次创建一个,而是直接用这个就可以,这样当然是为了节省空间。(注意,一个字符串是无法被修改的,所以在程序的不同地方用不同变量引用同一个常量串没有任何危险,因为你只能读取它而不能修改它。)
然后,new String(“zsx”)也创建了一个对象,”zsx”作为传入构造方法的实际参数,其含义就是:我要创建一个串,它的内容和串池中的”zsx”内容一致!
前两步建立的对象都是保存在堆heap上的。
最后String s = new String(“zsx”); 所做的工作是:在栈stack中创建一个引用s,然后s指向上一步new出的对象所在地。结束。
我一直觉得String的内容简单的很,我早就掌握了。直到看到这题,我知道我以前真是too young,too naive。知其然而不知其所以然,谓之“菜鸟”也。
知道真相的我立马滚去学习,现将所获记录如下:

  1. String的两种创建方式
  2. String的常用方法
  3. StringBuffer、StringBuilder
  4. String与StringBuffer的对比
  5. 自己实现String的一些常用方法

2015/8/3 17:09添加:
java里是没有运算符重载的,String+是StringBuffer的append()方法来实现的,如:

请把下面的程序编译后再反编译:
String a = “a”;
String b = “b”;
String c = a + b;
String d = c + 1;
得到的结果是:
String a = “a”;
String b = “b”;
String c = (new StringBuilder(String.valueOf(a))).append(b).toString();
String d = (new StringBuilder(String.valueOf(c))).append(1).toString();

所以,重载的是 append() 方法。

转载于:https://blog.51cto.com/13545923/2053483

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

06 小数据池 is 和 = = 再谈编码

今日主要内容 1. 小数据池, id() 小数据池针对的是: int, str, bool 在py文件中几乎所有的字符串都会缓存. id() 查看变量的内存地址 2. is和的区别 is 比较的是内存地址 比较的是内容 当两…

geek_愚蠢的怪胎技巧:在Windows 7中启用秘密的“ How-To Geek”模式

geekWe haven’t told anybody before, but Windows has a hidden “How-To Geek Mode” that you can enable which gives you access to every Control Panel tool on a single page—and we’ve documented the secret method for you here. 我们以前没有告诉过任何人&#…

使用MetaPost绘制流程图

小白最近闲来无事,自学了一点metapost,主要用它来绘制拓扑图或流程图。小白最近在写自己从工作以来的所学,写成了一份PDF的电子文档(小白不太会使用MS Word)。小白又不想使用JPEG或PNG格式的图片作为插图,因…

基于GDAL库,读取海洋风场数据(.nc格式)c++版

经过这一段时间的对海洋数据的处理,接触了大量的与海洋相关的数据,例如海洋地形、海洋表面温度、盐度、湿度、云场、风场等数据,除了地形数据是grd格式外,其他的都是nc格式的数据。本文将以海洋风场数据为例,进行nc格式…

zune linux_快速提示:在出售Zune HD之前,先擦除所有内容

zune linuxBefore selling your Zune HD online or to another individual, you’ll probably want to erase all of its content. Here we show you how to erase all of the content through the Zune Desktop Player. 在在线上出售Zune HD或将其出售给其他人之前&#xff0c…

SSM框架——使用MyBatis Generator自动创建代码

SSM框架——使用MyBatis Generator自动创建代码 这是通过命令行, 不用ide插件. 若在IDEA中通过插件generator, 还可以参考另一篇: IDEA搭建SpringSpringMVCmybatis框架教程转载于:https://www.cnblogs.com/yadongliang/p/8097449.html

镜像VirtualBox 下安装 CentOS 7搭建python项目

一、下载和安装VirtualBox工具 CentOS 镜像 下载地址(windows x86):百度网盘 提取码:z44g 安装说明:简书-XiTeacher 二、下载OS辅助工具——putty,mtputty,winscp 下载地址(windo…

Python基础七(函数)

函数概述 函数:组织好的、可重复使用的。杉树能提高应用的模块性和代码的重复利用性。Python提供了很多的内置函数,比如len()等等,可以自行定义函数。 函数的定义 def 函数名(参数列表): #函数定义 函数体…

ios 取消交互_每日新闻摘要:Google披露了iOS“无交互”漏洞

ios 取消交互Google, through its Project Zero initiative, disclosed six vulnerabilities in iOS. In each case, a hacker could execute remote code on someone’s iPhone without any interaction by the user. Apple’s iOS 12.3 fixes five of the issues. 谷歌通过其…

Ubuntu 16.04使用timedatectl进行管理时间(UTC/CST)(服务器/桌面)

说明:16.04开始,systemd接管了系统之后就不再使用/etc/default/rcS和ntpdate、dpkg-reconfigure tzdata进行时间的管理,所以在这些地方设置是无效的,标准的写法是使用timedatectl进行管理。且经过测试hwclock操作硬件BIOS&#xf…

让你的div可拖动(手机端)

电脑端引入 jQuery UI 可以实现。而手机并没有 mousemove 等事件,所以这里采用手机事件:touchstart 和 touchmove 实现拖拽。 一、引入: 只要引入 jQuery.js 和 dragger.js(如下)即可 注:实现拖拽部分转…

5-4 全局变量

1、函数内部使用全局变量时,需要申明global 1 name 小明 # 定义一个全局变量name,并给它赋值小明2 stus [] # 定义一个空list3 # list、字典、集合4 5 def a():6 # 字符串、int、float、元组 需要声明global7 global name # 函数内部使用局部变量时&a…

黑客攻防:从入门到入狱_每日新闻摘要:游戏服务黑客被判入狱27个月

黑客攻防:从入门到入狱On Christmas day, 2013, many delighted people opened up new Xbox and Playstation gifts. That excitement turned to disappointment when they were unable to log onto game services and play. Now the hacker responsible will spend 27 months …

Self Introduction

名流时尚服饰 dior 夏季 男装 男士t恤衬衫卫衣休闲裤牛仔裤英伦 socool 搜酷女包◆任选两款正价包包邮◆5周年店庆◆5折疯抢 紫紫 超人气包邮特价创意家居收纳压缩袋饰品服饰配件包包 socool 搜酷女包◆任选两款正价包包邮◆5周年店庆◆5折疯抢 dior 风格 CF Homme 男装 男士t恤…

爬虫notes

‘’’ 爬取思路: 1、requests(url) 2、requests json 3、requests XPath 4、requests BeautifulSoup 5、selenium 6、scrapy框架 7、scrapy-redis 及分布式 OS: import os os.system(“C: && p.txt”) os.system(“p…

Android 电量优化

Android系统上App的电量消耗主要由cpu、wakelock、数据传输(流量和wifi)、wifi运行、gps、other senior组成,而耗电异常也是由于这几个模块的使用不当。 BroaddcastReceiver 为了减少应用损耗的电量,代码中需要尽量避免无用的操作代码的执行 …

如何下载手机的App Store中不再存在的应用程序

Smartphone app stores are well established at this point, and as much as we love to see new apps become available, that also means the inevitable: sometimes apps go away. Here’s what you can do if your favorites disappear. 在这一点上,智能手机应…

Q_learning简介与实例

1、算法思想 QLearning是强化学习算法中value-based的算法,Q即为在某一环境下,Q(state,action)在某一时刻的 s 状态下(s∈S),采取 动作a (a∈A)动作能够获得收益的期望,环境会根据agent的动作反馈相应的回…

吴颖二:12.27 午评 地缘政治一波未平一波又起,千三可到?

前言:圣诞节后首个交易日,金银油均走出了大行情。美国因导弹项目制裁朝鲜两名官员,地缘局势再升温黄金本周能否突破1300关口?油价刷新两年半高位后,一个重要指标却已暗示短期内或面临风险…… 朝鲜局势进一步恶化的同时…

2-1 gradle安装

因为Gradle是基于JVM的,所以一定要确保本机已经安装了JDK,我们可以通过java -version来验证一下是否已经安装了JDK。 bin目录里面是两个可执行文件,一个是Windows下面的可执行文件,还有一个就是类Unix文件系统的可执行文件。所有的…