A. java代碼中的變數類型為什麼必須是String類型 為什麼不能改成其他類型
第一,String是一個類,format是這個類下面的一個靜態方法。char不是類是基本類型,基內本類型沒有方法容;
第二,字元串就是String類型,char代表一個字元而不是一串字元。
學語言,就要遵守這門語言的語法規則,不能自己隨便創造。
B. java String類型變數比較問題!!懂得進來下!
這是java的一種優化
創建String類型的變數有兩種方法
String
st
=
"相等"
String
st
=
new
String("相等");
第一種方式,會把"相等"這個字元串放在字元緩沖區中,如果有出現一個String
sr
=
"相等",就直接把緩沖區中的地址賦給sr,就會出現
st
與
sr
指向的內存地址相同的。
用第二種方式,就會各自開辟一個內存地址,不會出現上面的問題。
C. java中string型變數判斷是否為空哪個正確
首先就要確保他不是null,然後再判斷他的長度。
String str = xxx;
if(str != null && str.length() != 0) { }
這種做法是安全的,首先他會判斷str是否為空,如果為空那麼if就直接退出了,就不會再判斷後面的str.length() != 0了,這是JAVA的&&特性,也許其他語言也是這樣。
String字元串判定是否為空方法總結
判斷一個字元串str不為空的方法有:
1. str!=null;(前提條件)
2. 「」.equals(str);
3. str.length()!=0;
注意:length是屬性,一般集合類對象擁有的屬性,取得集合的大小。
例如:數組.length就是取得數組的長度。
length()是方法,一般字元串類對象有該方法,也是取得字元串長度。
例如:字元串.length();
說明:
1. null表示這個字元串不指向任何的東西,那麼沒有是否為空的問題,因為引用的實例對象都沒有。這時候如果你調用它的方法,那麼就會出現空指針異常。
2.」「表示它指向一個長度為0的字元串,這時候調用它的方法是安全的。
3. null不是對象,」「是對象,所以null沒有分配空間,」「分配了空間,例如:
String str1 = null; str引用為空
String str2 = 「」; str應用一個空串
str1還不是一個實例化的對象,兒str2已經實例化。
對象用equals比較,null用等號比較。
如果str1=null;下面的寫法錯誤:
if(str1.equals(「」)||str1==null){ }
正確的寫法是 if( ( str1==null ) || str1.equals(「」)){
//先判斷是不是對象,如果是,再判斷是不是空字元串;而且順序不能亂 }
D. java中方法對於String類型全部變數的操作
函數中在查找變數時,先查找的是局部變數,由於change函數中str變數和類變數相同,所以,str="com"賦值是,系統認為是對string str中的str賦值,而不是類屬性中的str,而str1和str2就不會產生這種誤會,在str="com"前面加一個限定this.str="com"即可消除這種歧義。
E. java中string後面如何加其他string變數
java中string類型的變數的值是無法改變的,如果想要在字元串後面加其他字元串,需要定義StringBuffer或者StringBuilder變數,StringBuffer和StringBuilder變數與String的功能基本一致,只不過值可以改變,它們是java後面版本升級加入用來完善String的
F. java中string類型變數的默認初始值是什麼
java中string類型變數的默認初始值是為null。
G. 在Java中String變數的最大長度是多少
u2是無符號的16位整數,因此理論上允許的string literal的最大長度是2^16-1=65535。然而實際測試表明,允許的最大長度僅為65534,超過就編譯錯誤了,有興趣可以寫段代碼試試,估計是length還不能為0。
H. JAVA中String類型變數的比較
比較內容用equals這種抄說法其實襲不完全正確的,因為String重寫了Object的equals方法,重寫的這個方法就是比較字元串的內容。
如果你用自己定義的對象的equals方法,則比較的是對象的地址是否相同,這是Object的默認比較方式。
所以你只要記住,對於字元串來說,都要用equals來比較,因為我們不可能會去比較一個String的地址是否相同,沒有任何意義。
I. Java String變數問題
第一個其實你是建立個一個object,object之間相比較是不能用==的,應該用equals,你可以把a==b換成a.equals(b)那麼列印出來的結果就是b srting equals a string
而第二個你建立的其實就是一個變數,相同類型的變數之間是可以用==來判斷布爾值的
下面回答你的問題
1你的理解是stack里有指針變數,java是沒有指針的。
2獲得string的hashcode,可以看一下java的api, class string里有個method叫hashCode()
public int hashCode()
所以直接System.out.println(a.hashCode());
就可以顯示出來
你可以看看這一篇文章,作者講解的很詳細
http://www.cnblogs.com/fzzl/archive/2009/04/01/1427563.html
J. Java中String的變數為什麼不是String對象
比較懶,即網上復制一段給你吧,這個比我自己將要詳細很多。
字元串類(java.lang.String)是Java中使用最多的類,也是最為特殊的一個類,很多時候,我們對它既熟悉又陌生。一、從根本上認識java.lang.String類和String池首先,我建議先看看String類的源碼實現,這是從本質上認識String類的根本出發點。從中可以看到:1、String類是final的,不可被繼承。public final class String。2、String類是的本質是字元數組char[], 並且其值不可改變。PRivate final char value[];然後打開String類的API文檔,可以發現:3、String類對象有個特殊的創建的方式,就是直接指定比如String x = "abc","abc"就表示一個字元串對象。而x是"abc"對象的地址,也叫做"abc"對象的引用。4、String對象可以通過「+」串聯。串聯後會生成新的字元串。也可以通過concat()來串聯,這個後面會講述。6、Java運行時會維護一個String Pool(String池),JavaDoc翻譯很模糊「字元串緩沖區」。String池用來存放運行時中產生的各種字元串,並且池中的字元串的內容不重復。而一般對象不存在這個緩沖池,並且創建的對象僅僅存在於方法的堆棧區。5、創建字元串的方式很多,歸納起來有三類:其一,使用new關鍵字創建字元串,比如String s1 = new String("abc");其二,直接指定。比如String s2 = "abc";其三,使用串聯生成新的字元串。比如String s3 = "ab" + "c"; 二、String對象的創建String對象的創建也很講究,關鍵是要明白其原理。原理1:當使用任何方式來創建一個字元串對象s時,Java運行時(運行中JVM)會拿著這個X在String池中找是否存在內容相同的字元串對象,如果不存在,則在池中創建一個字元串s,否則,不在池中添加。原理2:Java中,只要使用new關鍵字來創建對象,則一定會(在堆區或棧區)創建一個新的對象。原理3:使用直接指定或者使用純字元串串聯來創建String對象,則僅僅會檢查維護String池中的字元串,池中沒有就在池中創建一個,有則罷了!但絕不會在堆棧區再去創建該String對象。原理4:使用包含變數的表達式來創建String對象,則不僅會檢查維護String池,而且還會在堆棧區創建一個String對象。另外,String的intern()方法是一個本地方法,定義為public native String intern(); intern()方法的價值在於讓開發者能將注意力集中到String池上。當調用 intern 方法時,如果池已經包含一個等於此 String 對象的字元串(該對象由 equals(Object) 方法確定),則返回池中的字元串。否則,將此 String 對象添加到池中,並且返回此 String 對象的引用。三、不可變類不可改變的字元串具有一個很大的優點:編譯器可以把字元串設置為共享。 不可變類String有一個重要的優點-它們不會被共享引用。是這樣的,JAVA為了提高效率,所以對於String類型進行了特別的處理---為string類型提供了串池 定義一個string類型的變數有兩種方式: string name= "tom "; string name =new string( "tom ") 使用第一種方式的時候,就使用了串池, 使用第二中方式的時候,就是一種普通的聲明對象的方式 如果你使用了第一種方式,那麼當你在聲明一個內容也是 "tom "的string時,它將使用串池裡原來的那個內存,而不會重新分配內存,也就是說,string saname= "tom ",將會指向同一塊內存 另外關於string類型是不可改變的問題: string類型是不可改變的,也就是說,當你想改變一個string對象的時候,比如name= "madding " 那麼虛擬機不會改變原來的對象,而是生成一個新的string對象,然後讓name去指向它,如果原來的那個 "tom "沒有任何對象去引用它,虛擬機的垃圾回收機制將接收它。 據說這樣可以提高效率!!!
最後總結下,String是一個很特殊的類,它有一個字元串池。