Java中字符串string的數據類型
時間:2017-07-03 08:01:47 YuanMxy
原文:https://blog.csdn.net/YuanMxy/article/details/74170775
Java 基本數據類型
變量就是申請內存來存儲值。也就是說,當創建變量的時候,需要在內存中申請空間。
內存管理系統根據變量的類型為變量分配存儲空間,分配的空間只能用來儲存該類型數據。

因此,通過定義不同類型的變量,可以在內存中儲存整數、小數或者字符。
Java 的兩大數據類型:
- 內置數據類型
- 引用數據類型
內置數據類型
Java語言提供了八種基本類型。六種數字類型(四個整數型(byte short int long),兩個浮點型(float double)),一種字符類型(char),還有一種布爾型(boolean)。
2.問題描述:Java中字符串string屬於什么數據類型?
3.問題解答:
(1)首先給出數據類型的分類

(2)Java數據類型在內存中的存儲:
1)基本數據類型的存儲原理:所有的簡單數據類型不存在“引用”的概念,基本數據類型都是直接存儲在內存中的內存棧上的,數據本身的值就是存儲在棧空間里面,而Java語言里面八種數據類型是這種存儲模型;
2)引用類型的存儲原理:引用類型繼承於Object類(也是引用類型)都是按照Java里面存儲對象的內存模型來進行數據存儲的,使用Java內存堆和內存棧來進行這種類型的數據存儲,簡單地講,“引用”是存儲在有序的內存棧上的,而對象本身的值存儲在內存堆上的;
區別:基本數據類型和引用類型的區別主要在於基本數據類型是分配在棧上的,而引用類型是分配在堆上的(需要java中的棧、堆概念).
(3)那Java中字符串string屬於什么數據類型?
Java中的字符串String屬於引用數據類型。因為String是一個類,
"=="和 equals 方法究竟有什么區別?
==操作符專門用來比較兩個變量的值是否相等,也就是用於比較變量所對應的內存中所存儲的數值是否相同, 要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操作符。
如果一個變量指向的數據是對象類型的,那么,這時候涉及了兩塊內存, 對象本身占用一塊內存( 堆內存),變量也占用一塊內存,例如 Objet obj = new Object();變量 obj 是一個內存,new Object()是另一個內存,此時,變量 obj 所對應的內存中存儲的數值就是對象占用的那塊內存的首地址。對於指向對象類型的變量,如果要比較兩個變量是否指向同一個對象,即要看這兩個變量所對應的內存中的數值是否相等,這時候就需要用==操作符進行比較。
equals 方法是用於比較兩個獨立對象的內容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個對象是獨立的。
String a=new String("foo");
String b=new String("foo");
兩條 new 語句創建了兩個對象,然后用 a/b 這兩個變量分別指向了其中一個對象,這是兩個不同的對象,它們的首地址是不同的,即 a 和 b 中存儲的數值是不相同的,所以,表達式 a==b 將返回 false,而這兩個對象中的內容是相同的,所以,表達式 a.equals(b)將返回true。
java中String是引用數據類型
為什么
String str="scce"; String str2="scce";
str==str2 返回true
而String str2=new String("scce");
str==str2返回false
String str="scce"; //這是在靜態數據區創建了一個對象
String str2="scce"; //創建靜態數據對象是先在靜態數據區查,如果存在則不創建新的,保證靜態數據區中的數據只有一份,
str==str2返回true //指向同一個對象
String str2=new String("scce"); str==str2返回false //在堆中創建一個對象,引用值當然不同
Stirng特殊在如果靜態數據區中存在,那么不創建新的對象,而是指向這個對象。
那么為什么:
String str="scce";
String str2=new String("scce");
str.equals(str2)為true呢
因為String重新了equals方法
=================== End
