java的知识点15——String基础、String类和常量池、String类常用的方法、字符串相等的判断、组合模式
String基礎
1. String類又稱作不可變字符序列。
2. String位于java.lang包中,Java程序默認導入java.lang包下的所有類。
3. Java字符串就是Unicode字符序列,例如字符串“Java”就是4個Unicode字符’J’、’a’、’v’、’a’組成的。
4. ?Java沒有內置的字符串類型,而是在標準Java類庫中提供了一個預定義的類String,每個用雙引號括起來的字符串都是String類的一個實例。
5. Java允許使用符號"+"把兩個字符串連接起來。
? ?注:符號"+"把兩個字符串按給定的順序連接在一起,并且是完全按照給定的形式。
? ? ? ? ? 當"+"運算符兩側的操作數中只要有一個是字符串(String)類型,系統會自動將另一個操作數轉換為字符串然后再進行連接。
"+"連接符
package cn.dym05;public class Test05 {public static void main(String[] args) {int age=18;String str="age is "+age;System.out.println(str);} }String類和常量池
在Java的內存分析中,我們會經常聽到關于“常量池”的描述
實際上常量池也分了以下三種:
1. 全局字符串常量池(String Pool)
2. class文件常量池(Class Constant Pool)
3. 運行時常量池(Runtime Constant Pool)
常見問題:
String abc="a"+"b"+"c";? 一共創建了幾個對象?
String s=new String("hello"); 一共創建了幾個對象?
關鍵詞:對象個數? 內存指向
String pool? 機制? ? ?
目的:JVM為了提高性能和減少內存開銷,實現數據共享
1. 為字符串開辟一個字符串常量池(存在于方法區)? 方法區線程共享
2. 創建字符串常量時,首先檢查字符串常量池中是否存在該字符串
3. 存在該字符串,返回引用實例;不存在,實例化該字符串并放入池中
優化String? ? String intern()
package cn.dym06;public class StringPoolDemo {public static void main(String [] args) {String s1="Cat";String s2="Cat";String s3=new String("Cat");String s4=new String("Cat").intern();System.out.println(s1==s2);System.out.println(s1==s3);System.out.println(s1==s4);} }String類常用的方法?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String類的常用方法列表
String類常用方法一
package cn.dym06;public class StringTest1 {public static void main(String [] args) {String s1="core java";String s2="Core java";System.out.println(s1.charAt(3));//eSystem.out.println(s1.length());//9System.out.println(s1.equals(s2));//falseSystem.out.println(s1.equalsIgnoreCase(s2));//trueSystem.out.println(s1.indexOf("java"));//字符串s1中是否包含Java //5System.out.println(s1.indexOf("apple"));//-1String s=s1.replace(' ', '&');System.out.println("result is :"+s);//result is :core&java} }? ? ?
String類常用方法二
package cn.dym06;public class StringTest2 {public static void main(String[] args) {String s="";String s1="How are you?";System.out.println(s1.startsWith("How"));//trueSystem.out.println(s1.endsWith("you"));//falses=s1.substring(4);System.out.println(s);s=s1.substring(4, 7);//只能取到開頭,不能取到結尾System.out.println(s);s=s1.toLowerCase();System.out.println(s);s=s1.toUpperCase();System.out.println(s);String s2=" How old are you!! ";s=s2.trim();System.out.println(s);System.out.println(s2);} }字符串相等的判斷
? ? ? 1. equals方法用來檢測兩個字符串內容是否相等。如果字符串s和t內容相等,則s.equals(t)返回true,否則返回false。
? ? ??2. 要測試兩個字符串除了大小寫區別外是否是相等的,需要使用equalsIgnoreCase(“other String”)方法。
? ? ??3. 判斷字符串是否相等不要使用"=="。
字符串的比較"=="與equals()方法
package cn.dym06;public class Test01 {public static void main(String[] args) {System.out.println("Hello".equalsIgnoreCase("hellO"));//trueString s1="代止兮";String s2="代止兮";String s3=new String("代止兮");System.out.println(s1==s2);//trueSystem.out.println(s1==s3);//falseSystem.out.println(s1.equals(s3));//true //s1和s2里面的字符串內容是一樣的} }組合模式
package cn.dym06; class Cpu{public void run() {System.out.println("quickly…………");} } class MainBoard{public void connect() {System.out.println("connect…………");} } class Memory{public void store() {System.out.println("store…………");} }public class Computer {Cpu cpu;Memory memory;MainBoard mainBoard;public void work() {cpu.run();memory.store();mainBoard.connect();}public static void main(String[] args) {Computer computer=new Computer();computer.cpu=new Cpu();computer.memory=new Memory();computer.mainBoard=new MainBoard();computer.work();} }屬性用于定義該類或該類對象包含的數據或者說靜態屬性。屬性作用范圍是整個類體。
· 棧內存
? ? ??1. 每個線程私有,不能實現線程間的共享!
? ? ??2. 局部變量放置于棧中。
? ? ??3. 棧是由系統自動分配,速度快!棧是一個連續的內存空間!
· 堆內存
? ? ??1. 放置new出來的對象!
? ? ??2. 堆是一個不連續的內存空間,分配靈活,速度慢!
· 方法區
? ? ??1. 被所有線程共享!
? ? ??2. 用來存放程序中永遠是不變或唯一的內容(類代碼信息、靜態變量、字符串常量)。
總結
以上是生活随笔為你收集整理的java的知识点15——String基础、String类和常量池、String类常用的方法、字符串相等的判断、组合模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java的知识点14——内部类的概念、内
- 下一篇: java的知识点17——java.uti