欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何比較兩個字符串的大小

張吉惟2年前31瀏覽0評論

如何比較兩個字符串的大小?

兩個字符串比較大小:

一、可以用compareTo()方法,另外還有compareToIgnoreCase(String)忽略大小寫及compareTo(object string)這些方法返回值是int,以compareTo()方法為例:

1.如果字符串相等返回值為0,不等返回其他數(shù)值。

比較方法是先比較對應(yīng)字符的大小(Ascall嗎順序),從第一個字母開始比較。

2.如果第一個字符和參數(shù)的第一個字符不等,結(jié)束比較,返回他們之間的差值(ascii碼值)

(負(fù)值前字符串的值小于后字符串,正值前字符串大于后字符串)

3.如果第一個字符和參數(shù)的第一個字符相等,則以第二個字符和參數(shù)的第二個字符做比較,

以此類推,直至比較的字符或被比較的字符有一方全比較完,這時就比較字符的長度.

例如:

String s1="abc";

String s2="abcd";

String s3="abcdfg";

String s4="1bcdfg";

String s5="cdfg";

System.out.println(s1.compareTo(s2));//-1(前面相等,s1長度小1)

System.out.println(s1.compareTo(s3));//-3(前面相等,s1長度小3)

System.out.println(s1.compareTo(s4));//48("a"的ASCII碼是97,"1"的的ASCII碼是49,所以返回48)

System.out.println(s1.compareTo(s5));//-2("a"的ASCII碼是97,"c"的ASCII碼是99,所以返回-2)

二、還可以用“==”和.equals()方法判斷大小:

1.“==”是一個判斷相等的運算符,如果兩邊是基本數(shù)據(jù)類型,它判斷的是值;如果兩邊是復(fù)合型數(shù)據(jù)類型(類類型),它判斷的是地址;地址相同,內(nèi)容一定相同,地址不同,內(nèi)容不一定相同。

2..equals()方法只能判斷復(fù)合型數(shù)據(jù)類型,由于繼承Object類,默認(rèn)判斷的是兩邊在內(nèi)存的地址,判斷結(jié)果和“==”一樣,但在一些其他的類庫中equals()被重寫,例如String,Integer,Data等類中有其自身的實現(xiàn),比較內(nèi)容就不是地址了。

例如:

String str1=new String("hello");

String str2="hello";

System.out.println("str1==str2:"+(str1==str2));\\false

System.out.println("str1.equals(str2):"+str1.equals(str2));\\true

當(dāng)他們用(==)進行比較的時候,比較的是他們在內(nèi)存中的存放地址,所以,除非是同一個new出來的對象,他們的比較后的結(jié)果為true,否則比較后結(jié)果為false。

但equals()在String中被重寫過了,判斷的是內(nèi)容,不在是內(nèi)存中的地址,所以是true。

但是String比較特殊,因為我們都知道jvm把內(nèi)存分為3個區(qū),分別是方法區(qū),堆區(qū)和棧區(qū)。而在方法區(qū)中維護者一個String常量池,池中用來存放運行時產(chǎn)生的各種字符串,并且池中的內(nèi)容不重復(fù)。而一般對象不在這個池中,對象放在堆里。這就需要分析String的創(chuàng)建方式:

1.當(dāng)使用任何方式來創(chuàng)建一個字符串對象str=“X”時,Java運行時(運行中JVM)會拿著這個X在String池中找是否存在內(nèi)容相同的字符串對象,如果不存在,則在池中創(chuàng)建一個字符串str,否則,不在池中添加。

2.Java中,只要使用new關(guān)鍵字來創(chuàng)建對象,則一定會(在堆區(qū)或棧區(qū))創(chuàng)建一個新的對象。

3.使用直接指定或者使用純字符串串聯(lián)來創(chuàng)建String對象,則僅僅會檢查維護String池中的字符串,池中沒有就在池中創(chuàng)建一個,有則罷了!但絕不會在堆棧區(qū)再去創(chuàng)建該String對象。

4.使用包含變量的表達式來創(chuàng)建String對象,則不僅會檢查維護String池,而且還會在堆棧區(qū)創(chuàng)建一個String對象。

例如:

String str2="hello";

String str3="hello";

System.out.println("str3==str2:"+(str3==str2));\\true

System.out.println("str3.equals(str2):"+str3.equals(str2));\\true

true的原因是hello都是從常量池中取出來的,但你new出來的不管常量池中有沒有都會新建一個,地址就不一樣了。

擴展資料:

string用法

1.string strs

生成空字符串

2.string s(str)

生成字符串str的復(fù)制品

3.string s(str,stridx)

將字符串str中始于stridx的部分作為構(gòu)造函數(shù)的初值

4.string(str,strbegin,strlen)

將字符串str中始于strbegin,長度為strlen的部分作為字符串初值

5.string s(cstr)

以c_string類型cstr作為字符串s的初值

6.string s(cstr,char_len)

以c_string類型cstr的前char_len個字符作為字符串s的初值

7.string s(num,c)

生成一個字符串,包含num個c字符

8.string s(strs,beg,end)

以區(qū)間[beg,end]內(nèi)的字符作為字符串s的初值

例子

#include<iostream>

#include<string>

using namespace std;

int main()

{

string str("12345678");

char ch[]="abcdefgh";

string a;//定義一個空字符串

string str_1(str);//全部復(fù)制

string str_2(str,2,5);//從字符串str的第2個元素開始復(fù)制5個元素給str_2

string str_3(ch,5);//將字符串ch的前5個元素賦值給str_3

string str_4(5,'X');//將5個'X'組合賦值給str_4

string str_5(str.begin(),str.end());//復(fù)制str所有元素給str_5

cout<<str<<endl;

cout<<a<<endl;

cout<<str_1<<endl;

cout<<str_2<<endl;

cout<<str_3<<endl;

cout<<str_4<<endl;

cout<<str_5<<endl;

return 0;

}

java比較兩個數(shù)的大小,如何比較兩個字符串的大小