parseInt和valueOf
。split
static int parseInt(String s) 將字符串參數(shù)作為有符號(hào)的十進(jìn)制整數(shù)進(jìn)行分析。 static Integer valueOf(int i) 返回一個(gè)表示指定的 int 值的 Integer 實(shí)例。 static Integer valueOf(String s) 返回保持指定的 String 的值的 Integer 對(duì)象。 從返回值可以看出他們的區(qū)別 parseInt()返回的是基本類型int 而valueOf()返回的是包裝類Integer Integer是可以使用對(duì)象方法的 而int類型就不能和Object類型進(jìn)行互相轉(zhuǎn)換 實(shí)戰(zhàn)說明(加深) 例1: int i1 = Integer.parseInt(36); int i2 = Integer.parseInt(36); int i3 = Integer.valueof(36); int i3 = Integer.valueof(36); 例2: int i1 = Integer.parseInt(236); int i2 = Integer.parseInt(236); int i3 = Integer.valueof(236); int i4 = Integer.valueof(236); 分別運(yùn)行一下,可以發(fā)現(xiàn)例1,i1==i2,i3==i4,但是例2中i1==i2 ,而i3==i4 并不成立,這是因?yàn)閜arseInt返回的是一個(gè)有符號(hào)的Integer數(shù)值,而Valueof返回是一個(gè)實(shí)例,
更根本原因是對(duì)象池中數(shù)字是一個(gè)8bit有符號(hào)型,也就是說,數(shù)字大小在-128--127之內(nèi),valueof對(duì)于相同的數(shù)字返回的id是一致的,但是超過了這個(gè)范圍,就會(huì)新開辟一塊區(qū)域,
這就導(dǎo)致例2的情況出現(xiàn),所以在比較大小之內(nèi)是,需謹(jǐn)慎行事
http://blog.sina.com.cn/s/blog_76671eeb0100ui23.html
split
http://www.cnblogs.com/mingforyou/archive/2013/09/03/3299569.html
在java.lang包中有String.split()方法,返回是一個(gè)數(shù)組
我在應(yīng)用中用到一些,給大家總結(jié)一下,僅供大家參考:
1、如果用“.”作為分隔的話,必須是如下寫法,String.split("\\."),這樣才能正確的分隔開,不能用String.split(".");
2、如果用“|”作為分隔的話,必須是如下寫法,String.split("\\|"),這樣才能正確的分隔開,不能用String.split("|");
“.”和“|”都是轉(zhuǎn)義字符,必須得加"\\";
3、如果在一個(gè)字符串中有多個(gè)分隔符,可以用“|”作為連字符,比如,“acount=? and uu =? or n=?”,把三個(gè)都分隔出來,可以用String.split("and|or");
使用String.split方法分隔字符串時(shí),分隔符如果用到一些特殊字符,可能會(huì)得不到我們預(yù)期的結(jié)果。?
我們看jdk doc中說明??
public String[] split(String regex)
?Splits this string around matches of the given regular expression.?
參數(shù)regex是一個(gè) regular-expression的匹配模式而不是一個(gè)簡(jiǎn)單的String,他對(duì)一些特殊的字符可能會(huì)出現(xiàn)你預(yù)想不到的結(jié)果,比如測(cè)試下面的代碼用豎線 | 分隔字符串,你將得不到預(yù)期的結(jié)果
?
String[] aa = "aaa|bbb|ccc".split("|");//String[] aa = "aaa|bbb|ccc".split("\\|"); 這樣才能得到正確的結(jié)果for (int i = 0 ; i <aa.length ; i++ ) { System.out.println("--"+aa[i]); }?
用豎 * 分隔字符串運(yùn)行將拋出java.util.regex.PatternSyntaxException異常,用加號(hào) + 也是如此。
String[] aa = "aaa*bbb*ccc".split("*");//String[] aa = "aaa|bbb|ccc".split("\\*"); 這樣才能得到正確的結(jié)果 for (int i = 0 ; i <aa.length ; i++ ) { System.out.println("--"+aa[i]); }?
顯然, + * 不是有效的模式匹配規(guī)則表達(dá)式,用"\\*" "\\+"轉(zhuǎn)義后即可得到正確的結(jié)果。
"|" 分隔串時(shí)雖然能夠執(zhí)行,但是卻不是預(yù)期的目的,"\\|"轉(zhuǎn)義后即可得到正確的結(jié)果。
還有如果想在串中使用"\"字符,則也需要轉(zhuǎn)義.首先要表達(dá)"aaaa\bbbb"這個(gè)串就應(yīng)該用"aaaa\\bbbb",如果要分隔就應(yīng)該這樣才能得到正確結(jié)果,
String[] aa = "aaa\\bbb\\bccc".split("\\\\");package javabasi;import java.util.Scanner;/*** 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個(gè)數(shù)字。例如2+22+222+2222+22222(此時(shí)共有5個(gè)數(shù)相加),幾個(gè)數(shù)相加有鍵盤控制。* @author dlmu**/ public class SumA {public static void main (String [] args){Scanner sc = new Scanner(System.in);String str = sc.next();String[]number = str.split("\\+");int sum = 0;for (int i = 0; i < str.length(); i++){sum = sum + Integer.parseInt(number[i]);}System.out.println(sum);}} 2+22+222+2222+22222
提示異常,找不到錯(cuò)誤 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
?? ?at javabasi.SumA.main(SumA.java:18) 找到錯(cuò)誤了,是因?yàn)閒or循環(huán)中應(yīng)該是number.length,因?yàn)橐呀?jīng)把str用split分開,將數(shù)據(jù)存儲(chǔ)到number中了。 有錯(cuò)誤不可怕,要一步一步調(diào)試錯(cuò)誤。調(diào)試可以先用錯(cuò)誤提示和debug定位,定位到具體細(xì)節(jié)再用System.out.println()逐句輸出,逐個(gè)修正
?
?轉(zhuǎn)載于:https://www.cnblogs.com/fthjane/p/4782923.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的parseInt和valueOf的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL 5.6x开启慢查询日志
- 下一篇: ucosII移植要修改的文件