string類型用法,基礎03String類、static、Arrays類、Math類

 2023-11-30 阅读 24 评论 0

摘要:String類 java.lang.String類代表字符串。 API當中說:Java 程序中的所有字符串字面值(如 “abc” )都作為此類的實例實現。 其實就是說:程序當中所有的雙引號字符串,都是String類的對象。(就算沒有new,也照樣是。) 特

String類

java.lang.String類代表字符串。
API當中說:Java 程序中的所有字符串字面值(如 “abc” )都作為此類的實例實現。
其實就是說:程序當中所有的雙引號字符串,都是String類的對象。(就算沒有new,也照樣是。)

特點

1、字符串內容永不改變。【重點】
2、字符串不可改變,所以字符串是可以共享的。
3、字符串效果上相當于char[]字符數組,但是底層原理是byte[]字節數組。

string類型用法?創建字符串的常見3+1種方式。
三種構造方法:

public String():創建一個空白字符串,不含有任何內容。
public String(char[] array):根據字符數組的內容,來創建對應的字符串。
public String(byte[] array):根據字節數組的內容,來創建對應的字符串。
一種直接創建:
String str = “Hello”; // 右邊直接用雙引號

注意:直接寫上雙引號,就是字符串對象。

    public static void main(String[] args) {// 使用空參構造String str1 = new String(); // 小括號留空,說明字符串什么內容都沒有。System.out.println("第1個字符串:" + str1);// 根據字符數組創建字符串char[] charArray = { 'A', 'B', 'C' };String str2 = new String(charArray);System.out.println("第2個字符串:" + str2);// 根據字節數組創建字符串byte[] byteArray = { 97, 98, 99 };String str3 = new String(byteArray);System.out.println("第3個字符串:" + str3);// 直接創建String str4 = "Hello";System.out.println("第4個字符串:" + str4);}第1個字符串:
第2個字符串:ABC
第3個字符串:abc
第4個字符串:Hello

字符串常量池

c++ string類、字符串常量池:程序當中直接寫上的雙引號字符串,就在字符串常量池中。

對于基本類型來說,== 是進行數值的比較。
對于引用類型來說,== 是進行【地址值】的比較。

public static void main(String[] args) {String str1 = "abc";String str2 = "abc";char[] charArray = {'a', 'b', 'c'};String str3 = new String(charArray);System.out.println(str1 == str2); // trueSystem.out.println(str1 == str3); // falseSystem.out.println(str2 == str3); // false
}

在這里插入圖片描述

java中static類?解釋:
堆中有字符串常量池,代碼時直接創建的字符串,是在常量池中,(str1是直接雙引號寫出的字符串所以保存在常量池中。)代碼中abc底層用byte字節數組來表示,(參考ASCII,對應97.98.99)也就是字節數組的地址保存在常量池中的字符串對象中,

但是字符串對象也要有地址(0x666),str1保存了對象地址,創建str2,就把池子中的對象再用一遍,也就是str1和str2都保存了該字符串對象

然后創建了char型數組charArray,保存在堆中,后面緊接創建str3對象,(new出來的str3不在常量池)把char類型數組放了進來,
過程是:把原本char類型數組,轉換成byte類型數組并且創建字符串對象保存了byte數組的地址,然后把字符串對象地址交給了str3。

String類的功能方法

java string類、判斷,比較:
==是進行對象的地址值比較,如果確實需要字符串的內容比較,可以使用兩個方法:

public boolean equals(Object obj):參數可以是任何對象,只有參數是一個字符串并且內容相同的才會給true;否則返回false。

注意事項:

  1. 任何對象都能用Object進行接收。
  2. equals方法具有對稱性,也就是a.equals(b)和b.equals(a)效果一樣。
  3. 如果比較雙方一個常量一個變量,推薦把常量字符串寫在前面。
    推薦:“abc”.equals(str) 不推薦:str.equals(“abc”)
public boolean equalsIgnoreCase(String str):忽略大小寫,進行內容比較。public static void main(String[] args) {String str1 = "Hello";String str2 = "Hello";char[] charArray = {'H', 'e', 'l', 'l', 'o'};String str3 = new String(charArray);System.out.println(str1.equals(str2)); // trueSystem.out.println(str2.equals(str3)); // trueSystem.out.println(str3.equals("Hello")); // trueSystem.out.println("Hello".equals(str1)); // trueString str4 = "hello";System.out.println(str1.equals(str4)); // falseSystem.out.println("=================");String str5 = null;System.out.println("abc".equals(str5)); // 推薦:false
//        System.out.println(str5.equals("abc")); // 不推薦:報錯,空指針異常NullPointerExceptionSystem.out.println("=================");String strA = "Java";String strB = "java";System.out.println(strA.equals(strB)); // false,嚴格區分大小寫System.out.println(strA.equalsIgnoreCase(strB)); // true,忽略大小寫// 注意,只有英文字母區分大小寫,其他都不區分大小寫System.out.println("abc一123".equalsIgnoreCase("abc壹123")); // false}

Java用static定義類?String當中與獲取相關的常用方法有:

public int length():獲取字符串當中含有的字符個數,拿到字符串長度。
public String concat(String str):將當前字符串和參數字符串拼接成為返回值新的字符串。
public char charAt(int index):獲取指定索引位置的單個字符。(索引從0開始。)
public int indexOf(String str):查找參數字符串在本字符串當中首次出現的索引位置,如果沒有返回-1值。

public static void main(String[] args) {// 獲取字符串的長度int length = "hahahah".length();System.out.println("字符串的長度是:" + length);// 拼接字符串String str1 = "Hello";String str2 = "World";String str3 = str1.concat(str2);//和sql類似System.out.println(str1); // Hello,原封不動System.out.println(str2); // World,原封不動System.out.println(str3); // HelloWorld,新的字符串System.out.println("==============");// 獲取指定索引位置的單個字符char ch = "你好啊".charAt(1);System.out.println("在1號索引位置的字符是:" + ch);System.out.println("==============");//好// 查找參數字符串在本來字符串當中出現的第一次索引位置// 如果根本沒有,返回-1值String original = "nihaoaxixi";int index = original.indexOf("xi");System.out.println("第一次索引值是:" + index); // 6System.out.println("HelloWorld".indexOf("abc")); // -1
}

字符串的截取方法

public String substring(int index):截取從參數位置一直到字符串末尾,返回新字符串。
public String substring(int begin, int end):截取從begin開始,一直到end結束,中間的字符串。
備注:[begin,end),包含左邊,不包含右邊。

public static void main(String[] args) {String str1 = "HelloWorld";String str2 = str1.substring(5);//z只讀取world,一定要搞清楚w是幾號元素// 用鍵盤和光標光標處于H左邊,敲幾下鍵盤右鍵就是幾號System.out.println(str1); // HelloWorld,原本字符串不變,一定要清楚// 字符串創建了就不會發生改變,每當變化了就是創建了新的字符串System.out.println(str2); // World,新字符串System.out.println("================");String str3 = str1.substring(4,7);System.out.println(str3); // oWoSystem.out.println("================");// 下面這種寫法,字符串的內容仍然是沒有改變的// 下面有兩個字符串:"Hello","Java"// strA當中保存的是地址值。// 本來地址值是Hello的0x666,// 后來地址值變成了Java的0x999String strA = "Hello";System.out.println(strA); // HellostrA = "Java";//此時strA所管理的東西發生了改變System.out.println(strA); // Java
}

String當中與轉換相關的常用方法

public char[] toCharArray():將當前字符串拆分成為字符數組作為返回值。
public byte[] getBytes():獲得當前字符串底層的字節數組 。
public String replace(CharSequence oldString, CharSequence newString):
將所有出現的老字符串替換成為新的字符串,返回替換之后的結果新字符串。
備注:CharSequence意思就是說可以接受字符串類型。

public static void main(String[] args) {// 轉換成為字符數組char[] chars = "Hello".toCharArray();System.out.println(chars[0]); // HSystem.out.println(chars.length); // 5System.out.println("==============");// 轉換成為字節數組byte[] bytes = "abc".getBytes();for (int i = 0; i < bytes.length; i++) {System.out.println(bytes[i]);//97 98 99}System.out.println("==============");// 字符串的內容替換String str1 = "How do you do?";String str2 = str1.replace("o","*");System.out.println(str1); // How do you do?System.out.println(str2); // H*w d* y*u d*?System.out.println("==============");String lang1 = "會不會玩兒呀!你大爺的!你大爺的!你大爺的!!!";String lang2 = lang1.replace("你大爺的", "****");System.out.println(lang2); // 會不會玩兒呀!****!****!****!!!
}

字符串分割

一定注意和字符串的截取不一樣。
分割字符串的方法:
public String[] split(String regex):按照參數的規則,將字符串切分成為若干部分。

注意事項:

split方法的參數其實是一個“正則表達式”,今后學習。
今天要注意:如果按照英文句點“.”進行切分,必須寫"\\."(兩個反斜杠)

public static void main(String[] args) {String str1 = "aaa,bbb,ccc";String[] array1 = str1.split(",");for (int i = 0; i < array1.length; i++) {System.out.println(array1[i]);}//aaa bbb cccString str2 = "aaa bbb ccc";String[] array2 = str2.split(" ");for (int i = 0; i < array2.length; i++) {System.out.println(array2[i]);}//aaa bbb cccSystem.out.println("===============");String str3 = "XXX.YYY.ZZZ";String[] array3 = str3.split("\\.");//注意加\\反斜杠System.out.println(array3.length); //3for (int i = 0; i < array3.length; i++) {System.out.println(array3[i]);}
}

static關鍵字

如果一個成員變量使用了static關鍵字,那么這個變量不再屬于對象自己,而是屬于所在的類。多個對象共享同一份數據。
在這里插入圖片描述

/*
一旦使用static修飾成員方法,那么這就成為了靜態方法。靜態方法不屬于對象,而是屬于類的。如果沒有static關鍵字,那么必須首先創建對象,然后通過對象才能使用它。
如果有了static關鍵字,那么不需要創建對象,直接就能通過類名稱來使用它。無論是成員變量,還是成員方法。如果有了static,都推薦使用類名稱進行調用。
靜態變量:類名稱.靜態變量
靜態方法:類名稱.靜態方法()注意事項:
1. 靜態不能直接訪問非靜態。
原因:因為在內存當中是【先】有的靜態內容,【后】有的非靜態內容。
“先人不知道后人,但是后人知道先人。”
2. 靜態方法當中不能用this。
原因:this代表當前對象,通過誰調用的方法,誰就是當前對象。
靜態和對象沒關系。*/public class Demo02StaticMethod {public static void main(String[] args) {MyClass obj = new MyClass(); // 首先創建對象// 然后才能使用沒有static關鍵字的內容obj.method();// 對于靜態方法來說,可以通過對象名進行調用,也可以直接通過類名稱來調用。obj.methodStatic(); // 正確,不推薦,這種寫法在編譯之后也會被javac翻譯成為“類名稱.靜態方法名”MyClass.methodStatic(); // 正確,推薦// 對于本來當中的靜態方法,可以省略類名稱myMethod();Demo02StaticMethod.myMethod(); // 完全等效}public static void myMethod() {System.out.println("自己的方法!");}}
public class MyClass {int num; // 成員變量static int numStatic; // 靜態變量// 成員方法public void method() {System.out.println("這是一個成員方法。");// 成員方法可以訪問成員變量System.out.println(num);// 成員方法可以訪問靜態變量zSystem.out.println(numStatic);}// 靜態方法public static void methodStatic() {System.out.println("這是一個靜態方法。");// 靜態方法可以訪問靜態變量System.out.println(numStatic);// 靜態不能直接訪問非靜態【重點】
//        System.out.println(num); // 錯誤寫法!// 靜態方法中不能使用this關鍵字。
//        System.out.println(this); // 錯誤寫法!}}

在這里插入圖片描述

方法區有一塊獨特的靜態區,堆中創建了one,two 對象實體,其中有成員變量,
地址分別放到棧中。棧中根據類名稱訪問靜態成員變量時候,全程和對象沒關系,
只和類有關系。

靜態代碼塊:
/*
靜態代碼塊的格式是:

public class 類名稱 {static {// 靜態代碼塊的內容}
}特點:當第一次用到本類時,靜態代碼塊執行唯一的一次。
靜態內容總是優先于非靜態,所以靜態代碼塊比構造方法先執行。靜態代碼塊的典型用途:
用來一次性地對靜態成員變量進行賦值。*/
public class Demo04Static {public static void main(String[] args) {Person one = new Person();Person two = new Person();}}
/*
靜態代碼塊執行!
構造方法執行!
構造方法執行!
*/public class Person {static {System.out.println("靜態代碼塊執行!");}public Person() {System.out.println("構造方法執行!");}}

Arrays類

操作數組的各種方法,其所有方法都是靜態方法。也就是說不需要new對象就可以進行調用

/*
java.util.Arrays是一個與數組相關的工具類,里面提供了大量靜態方法,用來實現數組常見的操作。public static String toString(數組):將參數數組變成字符串(按照默認格式:[元素1, 元素2, 元素3...])
public static void sort(數組):按照默認升序(從小到大)對數組的元素進行排序。備注:
1. 如果是數值,sort默認按照升序從小到大
2. 如果是字符串,sort默認按照字母升序
3. 如果是自定義的類型,那么這個自定義的類需要有Comparable或者Comparator接口的支持。(今后學習)*/
public class Demo01Arrays {public static void main(String[] args) {int[] intArray = {10, 20, 30};// 將int[]數組按照默認格式變成字符串String intStr = Arrays.toString(intArray);System.out.println(intStr); // [10, 20, 30]int[] array1 = {2, 1, 3, 10, 6};Arrays.sort(array1);System.out.println(Arrays.toString(array1)); // [1, 2, 3, 6, 10]String[] array2 = {"bbb","ccc","aaa"};//sort默認按照字母升序Arrays.sort(array2);System.out.println(Arrays.toString(array2));
/*
java.util.Arrays是一個與數組相關的工具類,里面提供了大量靜態方法,用來實現數組常見的操作。public static String toString(數組):將參數數組變成字符串(按照默認格式:[元素1, 元素2, 元素3...])
public static void sort(數組):按照默認升序(從小到大)對數組的元素進行排序。備注:
1. 如果是數值,sort默認按照升序從小到大
2. 如果是字符串,sort默認按照字母升序
3. 如果是自定義的類型,那么這個自定義的類需要有Comparable或者Comparator接口的支持。(今后學習)*/
public class Demo01Arrays {public static void main(String[] args) {int[] intArray = {10, 20, 30};// 將int[]數組按照默認格式變成字符串String intStr = Arrays.toString(intArray);System.out.println(intStr); // [10, 20, 30]int[] array1 = {2, 1, 3, 10, 6};Arrays.sort(array1);System.out.println(Arrays.toString(array1)); // [1, 2, 3, 6, 10]String[] array2 = {"bbb","ccc","aaa"};//sort默認按照字母升序Arrays.sort(array2);System.out.println(Arrays.toString(array2));// [aaa, bbb, ccc]}}// [aaa, bbb, ccc]}}

練習:

import java.util.Arrays;/*
題目:
請使用Arrays相關的API,將一個隨機字符串中的所有字符升序排列,并倒序打印。*/
public class Demo02ArraysPractise {public static void main(String[] args) {String str = "sd1a5ndqwiodjwpojdqwwq659w5";//升序sort//必須是數組才能用Arrays.sort方法//String -->數組,用tocharArraychar[] chars = str.toCharArray();Arrays.sort(chars);//倒序打印for(int i = chars.length - 1; i >= 0 ; i--){//for循環可千萬別越界,別忘了長度減1System.out.println(chars[i]);}}}

Math類

基本數學運算方法,方法均為靜態方法,并且不創建對象,直接調用
絕對值:abs Math.abs()
向上取整:ceil
向下取整:floor
四舍五入:round

java.util.Math類是數學相關的工具類,里面提供了大量的靜態方法,完成與數學運算相關的操作。
public static double abs(double num):獲取絕對值。有多種重載。
public static double ceil(double num):向上取整。
public static double floor(double num):向下取整。
public static long round(double num):四舍五入。
Math.PI代表近似的圓周率常量(double)。

public class Demo03Math {public static void main(String[] args) {// 獲取絕對值 absSystem.out.println(Math.abs(3.14)); // 3.14System.out.println(Math.abs(0)); // 0System.out.println(Math.abs(-2.5)); // 2.5System.out.println("================");// 向上取整 ceilSystem.out.println(Math.ceil(3.9)); // 4.0System.out.println(Math.ceil(3.1)); // 4.0System.out.println(Math.ceil(3.0)); // 3.0System.out.println("================");// 向下取整,抹零 floorSystem.out.println(Math.floor(30.1)); // 30.0System.out.println(Math.floor(30.9)); // 30.0System.out.println(Math.floor(31.0)); // 31.0System.out.println("================");//四舍五入 round System.out.println(Math.round(20.4)); // 20System.out.println(Math.round(10.5)); // 11}}
/*
題目:
計算在-10.8到5.9之間,絕對值大于6或者小于2.1的整數有多少個?分析:
1. 既然已經確定了范圍,for循環
2. 起點位置-10.8應該轉換成為-10,兩種辦法:2.1 可以使用Math.ceil方法,向上(向正方向)取整2.2 強轉成為int,自動舍棄所有小數位
3. 每一個數字都是整數,所以步進表達式應該是num++,這樣每次都是+1的。
4. 如何拿到絕對值:Math.abs方法。
5. 一旦發現了一個數字,需要讓計數器++進行統計。備注:如果使用Math.ceil方法,-10.8可以變成-10.0。注意double也是可以進行++的。*/
public class Demo04MathPractise {public static void main(String[] args) {//-10.8-->5.9int count = 0;double min = -10.8;double max = 5.9;for (int i = (int)(min); i < max; i++) {int abs = Math.abs(i);if (abs > 6 || abs < 2.1) {count++;}}System.out.println("滿足要求的個數:" + count);}
}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/186175.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息