java substring截取字符串_lt;12gt;深入了解字符串
深入了解字符串
完整視頻教程:
Java輕松入門經典教程[檸檬學院]-學習視頻教程-培訓課程-騰訊課堂?ke.qq.com字符串主要用于編程,用于概念說明、函數解釋、用法詳述等,字符串在存儲上類似于字符數組,所以它的每一個單元都是可以提取的,如s =“abcdef”,則可以認為(此處為便于理解,實際上Java的字符串并不能這樣使用。):s[1]=”a”; s[2]=”b”。
一、字符串的處理
求子串
- 從HelloWorld中取出World(從0開始數,第5個到第9個字符),我們使用String類中的substring(startBit,endBit)這個方法,startBit代表起始位置,endBit代表結束位置。坐標采用前閉后開原則,假設:substring(5,9);,截取的字符串包好第五個,但不包含第九個,需要包含第九個的話就把9改成10;
測試字符串是否相等
- 比較字符串是否相等,使用的是equals()方法,我們所有的類都是繼承Object類,Object類中就有equals()方法,任何類都可以使用和重寫equals()。詳情請閱讀JavaAPI。
- 在Object類中的equals()方法的作用是:兩個引用都是指向同一個對象時(也就是內存地址相同),才會返回true。
- 在String類中的equals()方法的作用是:將此字符串與指定的對象比較,當且僅當該參數不為null,并且是與此對象表示相同字符序列的String對象時,才返回true。
String的equals比較的是內容,內容一致就返回true。
下圖中,s和s1如果是Object類型,比較返回false,因此內存地址不同。如果s和s1是String類型,比較返回true,因為內容一致。
二、字符串的存儲特點
1. 寄存器(cpu內部的高速存儲器)2. 棧
3. 堆 *new出來的對象都在堆內存中。
4. 靜態存儲區
5. 常量存儲區 *用final修飾的都在常量存儲區,String就是被final修飾的,同時String還有一個常量池。
6. 其他存儲區
下圖中我們預先判斷一下結果
1. s1.equals(s2)true。2. s1==s2 false
3. s1.equals(s3)false
4. s1==s3 false
實際結果:
第二個結果我們預計錯誤,雖然s1和s2是兩個對象,但是我們的內存地址是一樣的。這是因為String是存放在常量池中而不是在堆中,當我們給變量賦予一個字符串時,首先會在常量池尋找是否已經有這個字符串,如果有,直接指向該字符串,沒有的話就創建一個。所以s1和s2的內存地址是相同的。
我們知道,String是被final修飾的,所以字符串是不能修改的,因此字符串的拼接并沒有修改原來的字符串,而是重新創建一個新的字符串。所以修改String的值也就修改了內存地址,s1==s3也是返回false。
當我們使用String s = new String(“abc”);這種方式時,Sting對象將在堆內存中創建,所有特性符合堆內存特性。
按照常量池思維,c==d應該返回true,但實際上是false,因為c和d都是new出來的,是存儲在堆內存,堆內存不會鑒別字符串是否重復,只要new就創建新對象。
- 字符串編輯
可以使用算術運算符的+(加)進行字符串的連接處理。
總結
以上是生活随笔為你收集整理的java substring截取字符串_lt;12gt;深入了解字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双线性插值算法c 语言实现,双线性插值
- 下一篇: python文件是怎么写_python头