String类型的学习
一 :關(guān)于兩個(gè)string類型變量是否相等:
請(qǐng)運(yùn)行以下示例代碼StringPool.java,查看其輸出結(jié)果。如何解釋這樣的輸出結(jié)果?從中你能總結(jié)出什么?
?
?
分析:
首先為s0開辟空間,然后給s1開辟空間時(shí)發(fā)現(xiàn)與s0相同,所以s1和s0地址是相同的,,然后給s2開辟空間時(shí)發(fā)現(xiàn)也是相同的,要讓兩個(gè)變量相同,需要使他們的數(shù)值和地址都要相同,故前兩個(gè)輸出都是true,第三個(gè)先new一個(gè)“hello”,在new一個(gè)“hello”時(shí)就會(huì)在開辟一個(gè)空間,所以兩個(gè)不相同。故是false。
結(jié)論:
在Java中,內(nèi)容相同的字串常量(“Hello”)只保存一份以節(jié)約內(nèi)存,所以s0,s1,s2實(shí)際上引用的是同一個(gè)對(duì)象。
編譯器在編譯s2一句時(shí),會(huì)去掉“+”號(hào),直接把兩個(gè)字串連接起來得一個(gè)字串(“Hello”)。這種優(yōu)化工作由Java編譯器自動(dòng)完成。
當(dāng)直接使用new關(guān)鍵字創(chuàng)建字符串對(duì)象時(shí),雖然值一致(都是“Hello”),但仍然是兩個(gè)獨(dú)立的對(duì)象。
?
?
?
給字串變量賦值意味著:兩個(gè)變量(s1,s2)現(xiàn)在引用同一個(gè)字符串對(duì)象“a”,所以,s1==s2返回true 。 ?String對(duì)象的內(nèi)容是只讀的,使用“+”修改s1變量的值,實(shí)際上是得到了一個(gè)新的字符串對(duì)象,其內(nèi)容為“ab”,它與原先s1所引用的對(duì)象”a”無(wú)關(guān),所以,s1==s2返回false;
代碼中的“ab”字符串是一個(gè)常量,它所引用的字符串與s1所引用的“ab”對(duì)象無(wú)關(guān)。所以,s1=“ab”返回false。
String.equals()方法可以比較兩個(gè)字符串的內(nèi)容,他們的內(nèi)容都是ab所以,返回true。
?
二:String.equals()方法
?
?
結(jié)果分析:當(dāng)直接使用new關(guān)鍵字創(chuàng)建字符串對(duì)象時(shí),雖然值一致(都是“Hello”),但仍然是兩個(gè)獨(dú)立的對(duì)象。,所以s1==s2返回false,但他們數(shù)值是一樣的,所以s1.equal(s2)返回true。,s3,s4引用的同一個(gè)對(duì)象,所以數(shù)值和地址都相同,所以最后兩個(gè)比較返回都是true。
?
?
三:字串加密
古羅馬皇帝凱撒在打仗時(shí)曾經(jīng)使用過以下方法加密軍事情報(bào):
?
?
?
請(qǐng)編寫一個(gè)程序,使用上述算法加密或解密用戶輸入的英文字串要求設(shè)計(jì)思想、程序流程圖、源代碼、結(jié)果截圖。
?
設(shè)計(jì)思想:加密和解密的思想就是把一個(gè)字符串中的所有字符加上或減去一個(gè)固定的值,然后在輸出來。首先傳入一個(gè)字符串,構(gòu)造一個(gè)加密和解密的方法,輸入數(shù)字判斷選擇加密或者解密,在寫方法時(shí),加密方法,需要定義一個(gè)char[]類型的方法,傳入一個(gè)字符串,返回一個(gè)char類型的數(shù)組,調(diào)用length()對(duì)字符串中的所有的字符進(jìn)行加上一個(gè)3,如果是XYZ減去23,然后返回這個(gè)char數(shù)組即可,如果是解密方法,需要定義一個(gè)char[]類型的方法,傳入一個(gè)字符串,返回一個(gè)char類型的數(shù)組,調(diào)用length()對(duì)字符串中的所有的字符進(jìn)行減去一個(gè)3,如果是ABC加上23,然后返回這個(gè)char數(shù)組即可。
?
流程圖:
?
源代碼:package Demo;
?
import java.util.Scanner;
?
public class JiaMi {
public static void main(String[]args)
{
Scanner scanner=new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)字符串");
String m=scanner.next();
System.out.println("請(qǐng)輸入你想加密還是解密,加密輸入1,解密輸入2");
int n=scanner.nextInt();
while(n!=1&&n!=2)
{
System.out.println("請(qǐng)重新輸入一個(gè)字符串");
n=scanner.nextInt();
}
if(n==1)
System.out.println(jiami(m));//如果下面的方法不定義為static類型的那摩在調(diào)用下面的方法時(shí)需這樣寫new JiaMi().jiami().
else if(n==2)
System.out.println(jiemi(m));
}
static char[] jiami(String m)//返回是數(shù)組時(shí),定義時(shí)加個(gè)[]。
{
char[] c=new char [m.length()];
int i=0;
while(m.length()>i)
{
if(m.charAt(i)>=88 && m.charAt(i)<=90)
c[i]=(char)(m.charAt(i)-23);
else
c[i]=(char) (m.charAt(i)+3);
i++;
}
return c;
}
static char[] jiemi(String m)
{
char[] c=new char [m.length()];
int i=0;
while(m.length()>i)
{
if(m.charAt(i)<=67 && m.charAt(i)>=65)
c[i]=(char)(m.charAt(i)+23);
else
c[i]=(char) (m.charAt(i)-3);
i++;
}
return c;
}
}
結(jié)果截圖:
?
?
?
?
結(jié)果分析:第一個(gè)截圖是一個(gè)普通的加密結(jié)果,第二個(gè)是帶有特殊字符的(XYZ)的加密驗(yàn)證,XYZ需要轉(zhuǎn)換成ABC ,結(jié)果正確,第三個(gè)是帶有特殊字符的解密驗(yàn)證(ABC),ABC需要轉(zhuǎn)換成XYZ。驗(yàn)證無(wú)誤。
String類型方法的總結(jié):
主要包括Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()
2、String類的常用方法:
(1)public char charAt(int? index)返回字符串中第index個(gè)字符
(2)public int length()返回字符串的長(zhǎng)度
(3)public String toUpperCase()返回一個(gè)字符串為該字符串的大寫形式
(4)public String toLowerCase()返回一個(gè)字符串為該字符串的小寫形式
(5)public String replace(char oldChar,char newChar)在字符串中用newChar字符替換oldChar字符
(6)public String trim()返回將該字符串去掉開頭和結(jié)尾空格后的字符串。
(7)char[ ] toCharArray() :將該String對(duì)象轉(zhuǎn)換成char數(shù)組。
(8)getChars() 將這個(gè)字符串字符復(fù)制到目的字符數(shù)組。
?
轉(zhuǎn)載于:https://www.cnblogs.com/qingtianxt/p/6006884.html
總結(jié)
以上是生活随笔為你收集整理的String类型的学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vmware centos 7 刚装上不
- 下一篇: 14.5.3 Locks Set by