Ⅰ java中 怎麼將一個字元串型的算式算出結果 必須要方法易懂,方法別太高級,初學
字元串的算式 我給你說些方法和思路吧 要算 其實就是 拆分他 然後將數字部分專轉化 然後進行計算屬
第一步 例如 indexOf("+")找符號 然後String[] arr=split("+") 拆分 然後將兩部分運算 arr[0] arr[1]
當然了 這是簡單的 或者用 substring(起始位置,終止位置) 截取兩個來算也行
Ⅱ java中如何實現字元與數字加減運算
int f = 'a' + 4;
System.out.println(f);
結果是:來101
System.out.println((char)f);
結果是:e
java中也是源可以字元+數值的,java也是會自動類型轉換的(由低到高,成為隱式轉換),相加過程中會將char型先轉int型然後相加。 如果由高到低類型的轉換就得強轉(稱為顯式轉換),如:(char)101
Ⅲ java中的字元串相加
首先你要搞清楚的是字元串用==比較,是比較兩個字元串是不是指向同一個對象。
程序在運行的時候會創建一個字元串緩沖池,程序會把字元串常量(如程序中的"a","b","ab","a"+"b")放入字元串緩沖池中(這里"ab","a"+"b"是一個對象)。當使用
String s3 = "ab";
String s4 = s1 + s2;
String s5 = "a" + "b";
這樣的表達是創建字元串的時候,程序首先會在這個String緩沖池中尋找相同值的對象,s3先被放到了池中,所以在s5被創建的時候,程序找到了具有相同值的 s3,將s5引用s3所引用的對象"ab"。所以比較s5==s3由於兩個是指向同一個對象,所以為true。
但是在這些賦值中,涉及到變數運算,所以得到的字元串對象存儲在各自的內存中,不是緩沖池中的s3對象,如
String s4 = s1 + s2;
String s6 = s1 + "b";
所以 盡管s4,s6的值均為"ab",但是 s4==s3,s6==s3返回的結果均為false;
同時s4,s6也不是指向相同的對象,因為他們在不同內存中。
StringBuffer s7 = new StringBuffer("abc");
String s8 = s7.substring(3); //這個方法是從第3個字元取字元串,得到的s8為"'; 為空字元串。
所以s8==s3的結果也為false;
如果相比較兩個字元串的值是不是相等,最好用.equals()方法。
Ⅳ java中,兩個String類型的字元串相加得到一個新的字元串,請問原來的字元串是否改變,為什麼
在Java中,處理字元串時常常會遇到String和StringBuffer這兩種類型。String的長度是固定的,一旦創建,就不能被改變。當你執行字元串相加操作時,例如使用+號連接兩個字元串,實際上是在內存中創建了一個新的String對象,原有的字元串並沒有改變。這背後的原因是,由於String的不可變性,每次修改都會導致重新分配內存,進而產生新的String對象,而舊的對象會被垃圾回收器回收,以釋放內存資源。
相比之下,StringBuffer則是可變的字元串對象。它在創建時會分配一定的內存空間,該空間足以容納初始字元串。當你對其進行修改,如追加或替換內容時,並不會重新分配內存,而是直接修改已有的內存空間。這使得StringBuffer更適合需要頻繁修改字元串內容的應用場景,因為它在內存中直接修改內容,不會產生新的對象,因此性能更好。
例如,如果你有一個長字元串,需要不斷追加內容,使用StringBuffer會比連續使用String + 連接符更高效。因為每次追加操作都只是修改StringBuffer對象內部的內存指針,而不涉及內存的重新分配。然而,當最終不需要頻繁修改時,可以將StringBuffer的內容轉換為String,以便進行後續的處理。
總結來說,String的不可變性意味著每次修改都會產生新的對象,而StringBuffer的可變性則允許直接修改原有對象的內容,從而避免了不必要的內存分配和垃圾回收過程。理解這兩者的區別有助於更有效地編寫Java程序,特別是在處理大量字元串操作時。