String s = new String(123) 究竟創建了幾個對象

分享一波:程序員賺外快-必看的巔峰干貨

前言

今天上班劃水的過程中有人詢問到這個問題,網上對于這個問題也有爭議,有說創建了一個對象,有說兩個,有說三個。

首先說三個的肯定是扯淡了,今天來討論一下這條語句到底創建了幾個對象。

在進入正題之前,先回顧一下幾個基礎知識。
常量池

常量池是為了避免對對象的重復創建和銷毀而影響系統性能,從而實現對象共享。在編譯期就能確定的字符串,會被存放到常量池中,如String s = “123”;。此后如果使用到123這個字符串,就會直接從常量池中獲取,而不用每次都再new一個123出來。關于常量池更詳細的知識點,請閱讀這篇文章 Java常量池
對象比較

==和equals的區別想必就不需要我著重介紹了,equals比較的是值,==比較引用類型時,比較的是地址。
進入正題

稍微介紹了一下上面兩個基礎知識點,下面進入正題,String s = new String(“123”)究竟創建了幾個對象?這里先說結論,第一次創建了兩個,第二次創建了一個。

我們來分析這條語句。首先s是一個引用變量,用來接收new的String,因此s不是一個對象。new String是典型的創建一個對象,放到堆中。而"123"也是個對象,123在編譯期就可以確定,因此是放到常量池。上面這句代碼可以拆成下面兩條。

String temp = “123”;
String s = new String(temp);

這樣就很容易理解了,String temp = "123"毫無疑問是創建了一個對象,new String(temp)又創建了一個對象,因此是兩個。

那么創建一個對象的結論是從何而來的?

首先來通過代碼證明一下常量池是否存在。

String s1 = “123”;
String s2 = “123”;
System.out.println(s1 == s2);

s1和s2都是字符串對象,通過==比較的是二者地址,運行結果為true,說明二者地址相同,是同一個對象。

在 String s1 = “123”;這條語句中,創建了一個對象"123",放入常量池中,下面的String s2 = “123”;從常量池中取出了123并賦值給s2,因此s2這條語句沒有創建對象。

那么我們看下面的代碼。

String temp = “123”;
String s1 = new String(temp);

String temp2 = “123”;
String s2 = new String(temp2);

在這個代碼中,上面的代碼創建了兩個對象,分別是"123"和new String(“123”),接著, 123被存入常量池中。下面的代碼取出123并new String(“123”),只創建了一個對象。
結語

在 String s = new String(“123”) 這條語句中

當常量池中不存在123時,創建了兩個對象。

當常量池中存在123時,創建了一個對象。

*************************************優雅的分割線 **********************************

分享一波:程序員賺外快-必看的巔峰干貨

如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程

請關注微信公眾號:HB荷包
在這里插入圖片描述
一個能讓你學習技術和賺錢方法的公眾號,持續更新

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/537016.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537016.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537016.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jquery級試題_JS-jQuery練習題面試題

ES5中不能實現繼承的關鍵字A prototypeB callC applyD extends正確答案: D extends //屬于ES6不屬于常見23種設計模式A 單例B MVCC 觀察者D 策略正確答案: B創建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。結構型模式&…

Vue 計算屬性與偵聽器

這一節我們一起學習 vue 中的計算屬性(computed properties)和偵聽器(watch)。 在之前&#xff0c;我們學習過 vue 表達式插值&#xff1a; <div id"example">{{ message.split().reverse().join() }} </div> 如果在模板中放入太多的邏輯會讓模板過重且難…

程序員到底要不要重復造輪子?

分享一波:程序員賺外快-必看的巔峰干貨 關于這個話題&#xff0c;現在這里闡述立場&#xff1a;就公司工作而言&#xff0c;不建議重復造輪子。就個人技術而言&#xff0c;強烈建議造輪子&#xff01; 程序員圈子里流行這么一句話&#xff1a;“不要重復造輪子”。它的原文是…

1582年日歷怎么了_【知乎周邊】知乎2020年日歷開箱+測評

感謝 劉看山 劉看山福利社 知一聲 這邊知乎朋友贈送的禮物&#xff0c;這邊拿到了新的一年2020年知乎的日歷。隨日歷還贈送了一年的鹽選會員體驗卡&#xff0c;這個福利很特別哈。打開盒子&#xff0c;里面是厚厚的但是卻不是很大的一個正方體。側面寫有“有問題的日歷”日歷內…

Redis集群一致性Hash效果的代碼演示

在微服務領域&#xff0c;使用Redis做緩存可并不是一件容易的事情。 像新浪、推特這樣的應用&#xff0c;許許多多的熱點數據全都存放在Redis這一層&#xff0c;打到DB層的請求并不多&#xff0c;可以說非常依賴緩存了。如果緩存掛掉&#xff0c;流量全部穿透到DB層&#xff0c…

多線程-題

1、進程和線程之間有什么不同&#xff1f; 一個進程是一個獨立&#xff08;self contained&#xff09;的運行環境&#xff0c;它可以被看作一個程序或者一個應用。而線程是在進程中執行的一個任務。java運行環境是一個包含了不同的類和程序的單一進程。線程可以被稱為輕量級進…

JDK8那些驚為天人的新特性

分享一波:程序員賺外快-必看的巔峰干貨 介紹 隨著java的發展&#xff0c;越來越多的企業開始使用 java8 版本。Java8 是自 java5之后最重要的版本&#xff0c;這個版本包含語言、編譯器、庫、工具、JVM等方面的十多個新特性。本次課程將著重學習其中的一些重點特性。 Jdk8新…

mount 安卓system只讀_Android如何讓system分區可讀寫(MTK安卓6.0)-阿里云開發者社區...

Android 系統默認情況下&#xff0c;system 分區是只讀 mount 的&#xff0c;因為無法進行往里寫數據的&#xff0c;可以用 adb 命令 adb remount 重新 mount 一下。也可以通過在板子上&#xff0c;輸入以下命令重新mount一下system分區命令使其可讀可寫。# mount -o remount /…

【數據結構和算法05】 紅-黑樹(轉發)

2019獨角獸企業重金招聘Python工程師標準>>> 【數據結構和算法05】 紅-黑樹&#xff08;看完包懂~&#xff09; 置頂 2016年04月13日 15:50:25 eson_15 閱讀數&#xff1a;52681 標簽&#xff1a; java數據結構算法紅黑樹 更多 個人分類&#xff1a; ● 結構算法---…

數據結構與算法——二叉樹、堆、優先隊列

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 七、樹 7.1 樹 7.1.1 樹的定義 樹是我們計算機中非常重要的一種數據結構&#xff0c;同時使用樹這種數據結構&#xff0c;可以描述現實生活…

android組建之間通信_Android組件化(三)組件之間的通信

介紹在組件化開發的時候&#xff0c;組件之間是相互獨立的沒有依賴關系&#xff0c;我們不能在使用顯示調用來跳轉頁面了&#xff0c;因為我們組件化的目的之一就是解決模塊間的強依賴問題&#xff0c;假如現在要從A業務組件跳轉到業務B組件&#xff0c;并且要攜帶參數跳轉&…

繼牛津大學后,加大伯克利分校等多家美國高校終止與華為合作

文&#xff0f;AI財經社 唐煜編&#xff0f;嵇國華據 Nature News 報道&#xff0c;在美國相關部門的壓力之下&#xff0c;加州大學伯克利分校&#xff08;UC Berkeley&#xff09;近日宣布不再與華為簽署新的研究合作&#xff1b;德州大學奧斯丁分校也正在審查自身與華為的關系…

為什么varchar字段長度最好是2的n次方-1

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 計算機是二進制計算的&#xff0c;1 bytes 8 bit ,一個字節最多可以代表的數據長度是2的8次方 11111111 在計算機中也就是-128到127。 而var…

運籌學狀態轉移方程例子_強化學習第4期:H-J-B方程

在上一篇文章中&#xff0c;我們介紹了一種最簡單的MDP——s與a都是有限的MDP的求解方法。其中&#xff0c;我們用到了動態規劃的思想&#xff0c;并且推出了“策略迭代”、“值迭代”這樣的方法。今天&#xff0c;我們要來講更加一般的最優控制問題——t、a與s都是連續的問題。…

Python之celery的簡介與使用

celery的簡介 celery是一個基于分布式消息傳輸的異步任務隊列&#xff0c;它專注于實時處理&#xff0c;同時也支持任務調度。它的執行單元為任務&#xff08;task&#xff09;&#xff0c;利用多線程&#xff0c;如Eventlet&#xff0c;gevent等&#xff0c;它們能被并發地執行…

不使用比較運算符如何比較兩個數的大小

分享一波:程序員賺外快-必看的巔峰干貨 前言 今天在水群的過程中看到有位群員談論到這個話題&#xff0c;是他找工作過程中某家公司的面試題&#xff08;到底是哪家公司才會出這種沒營養的題目刁難別人&#xff09;&#xff0c;有點興趣&#xff0c;就開始寫了。 開搞 想了一…

java占位符填充_Java使用freemark生成word

1、制作模板先用office word做一個模板word文檔&#xff0c;${usrName}、${nowDate}占位符 可以使用 office 或者 wps 先創建一個模板表格 &#xff08;替換$部分可以在 模板格式改變之后 在替換xml 格式改了后有些原本的字符會分開&#xff09;2、用office word將模板word另存…

Java中如何使用非阻塞異步編程——CompletableFuture

分享一波:程序員賺外快-必看的巔峰干貨 對于Node開發者來說&#xff0c;非阻塞異步編程是他們引以為傲的地方。而在JDK8中&#xff0c;也引入了非阻塞異步編程的概念。所謂非阻塞異步編程&#xff0c;就是一種不需要等待返回結果的多線程的回調方法的封裝。使用非阻塞異步編程…

城市運行一網統管_【宣傳活動】持續開展城市運行“一網統管”建設宣傳活動...

為進一步推進本鎮城市運行“一網統管”建設工作&#xff0c;提高城市治理能力和治理水平&#xff0c;提升社會各界的知曉度和參與度&#xff0c;激發職能部門人員、黨員、群眾參與“一網統管”工作的熱情。9月10日&#xff0c;鎮網格中心于福泉居委會議室開展“推進城市運行‘一…

Java如何只使用位運算實現加減乘除

分享一波:程序員賺外快-必看的巔峰干貨 前言 接前面一篇博客&#xff0c;這又是某個公司的奇葩面試題&#xff08;都說了到底是哪家公司才會出這種沒營養的面試題&#xff09;。不過吐槽歸吐槽&#xff0c;這個題目還是有點學問的&#xff0c;比前面那個 不使用比較運算符如何…