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.pswp.cn/news/278764.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278764.shtml
英文地址,請注明出處:http://en.pswp.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文件系統的可執行文件。所有的…