今天就跟大家聊聊有關(guān)Java 數(shù)據(jù)類型及類型轉(zhuǎn)換實現(xiàn)互相轉(zhuǎn)換,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
在撫松等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,營銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),撫松網(wǎng)站建設(shè)費用合理。java的數(shù)據(jù)類型可以分為兩大類:基本類型和復(fù)合類型。
基本類型:整型(int,short,long,byte)、浮點型(float,double)、布爾型(boolean)、和字符型(char)
復(fù)合類型:數(shù)組,類,接口
各種整型數(shù)據(jù)所占空間及數(shù)的范圍
數(shù)據(jù)類型 | 所占內(nèi)存空間/位 | 數(shù)的范圍 |
byte | 8 | -128~127 |
short | 16 | -32768~32767 |
int | 32 | -2^31~2^31-1 |
long | 64 | -2^63~2^63-1 |
整型以補碼的形式存放在內(nèi)存中。
浮點類型所占的位數(shù)及數(shù)值范圍
數(shù)據(jù)類型 | 所占內(nèi)存空間/位 | 有效數(shù)字 | 數(shù)值范圍 |
float | 32 | 7個十進(jìn)制位 | 約+-3.4x10^38 |
double | 64 | 15~16個十進(jìn)制位 | 約+-1.8x10^308 |
用char表示。2字節(jié)(16位)來存放一個字符,并且存放的不是ASCII碼是Unicode碼。
用boolean表示。只有兩個取值true和false。
常量包含整型常量,浮點型常量,字符型常量,字符串常量以及布爾常量,符號常量(用final來定義 eg final int MALE = 1;)
十進(jìn)制(正數(shù),負(fù)數(shù),0),八進(jìn)制(以0開頭)和十六進(jìn)制(以0x或0x開頭)
浮點型常量有兩種表示形式。
普通的十進(jìn)制數(shù)形式。由數(shù)字和小數(shù)組成。如0.123;123.0;0.0;.123;123.都是合法的
指數(shù)形式。1.5E5表示1.5x10^5;2.9E-7表示2.9x10^-7。注意字母E(也可以是小寫e)之前必須有數(shù)字,且E后面的指數(shù)必須是整數(shù)。如E3,2E1.7均不合法。
java規(guī)定浮點數(shù)默認(rèn)雙精度,如果需要指定單精度,需要在末尾加上F或f.比如12.5F,2E5f。
java用來表示變量名、常量名、方法名、類名的有效字符序列都成為用戶自定義標(biāo)識符,簡稱標(biāo)識符。eg:int a = 1;a就是一個標(biāo)識符。
變量包含整型變量,浮點型變量,字符變量,布爾型變量。
浮點數(shù)的采用二進(jìn)制方式存儲的,二進(jìn)制浮點數(shù)往往不能精確表示一個十進(jìn)制小數(shù),即使這個小數(shù)是一個有限小數(shù),比如1.3,它在內(nèi)存中也是一個無限小數(shù),即可能是1.299999,也可能是1.300001。所以盡量避免直接比較兩個浮點數(shù)是否精確相等。通常的方法是比較兩個兩個浮點數(shù)的差值是否足夠接近0。
將一個字符存放到字符變量中,實際上并不是把該字符本身存放到內(nèi)存單元內(nèi),而是將該字符的Unicode碼存放到內(nèi)存單元中。比如字符‘A'的Unicode嗎是0x0041,它會以二進(jìn)制存儲在內(nèi)存中。
它的存儲類型和short很相似,其實Java確實將字符變量作為無符號的短整型數(shù)據(jù)來處理的,這就決定了Java中的字符數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。用戶對可以對字符型數(shù)據(jù)進(jìn)行算數(shù)運算,此時相當(dāng)于將它的Unicode碼看成一個整數(shù)進(jìn)行運算。
Java規(guī)定一個局部變量在使用之前必須要初始化,否則無法通過編譯。局部變量指的是定義在方法里的變量,它只有在方法里有效,在方法外無法使用。
轉(zhuǎn)換基本規(guī)則:范圍小的轉(zhuǎn)為范圍大的,精度小的轉(zhuǎn)為精度大的。按照數(shù)據(jù)轉(zhuǎn)換時是否有會損失精度,Java中的轉(zhuǎn)換分為擴(kuò)展轉(zhuǎn)換和縮減轉(zhuǎn)換。
原類型 | 目的類型 |
byte | short,int,long,float,double |
short | int,long,float,double |
char | int,long,float,double |
int | long,float,,double |
long | float,double |
float | double |
eg:byte+int —— int+int;int+double —— double+double
Java規(guī)定,如果兩個數(shù)據(jù)類型沒出現(xiàn)在同一行的兩列,則兩個數(shù)據(jù)都必須轉(zhuǎn)換成同一類型,若這個目的類型有多個可以選擇,則選精度,范圍最小的那個。
eg: byte+char —— int+int。
擴(kuò)展轉(zhuǎn)換是系統(tǒng)自動進(jìn)行的,又稱自動類型轉(zhuǎn)換,不會損失精度。
Java規(guī)定凡是符合下表的轉(zhuǎn)換,稱為縮減轉(zhuǎn)換。這種轉(zhuǎn)換會損失精度,系統(tǒng)不會自動進(jìn)行,需要程序員顯示地指定。
原類型 | 目的類型 |
short | byte |
char | byte,short |
int | byte,short,char |
long | byte,short,char,int |
float | byte,short,char,int,long |
double | byte,short,char,int,long,float |
要將第一列的數(shù)據(jù)轉(zhuǎn)換成第二列的數(shù)據(jù)類型,必須使用強(qiáng)制類型轉(zhuǎn)化?;靖袷剑海〝?shù)據(jù)類型)數(shù)據(jù)
eg: int a —— (byte)a
強(qiáng)制類型轉(zhuǎn)換也可用在擴(kuò)展轉(zhuǎn)換中,使閱讀更清晰。
eg: long+int+byte —— long+(long)int+(long)byte
注意:無論擴(kuò)展轉(zhuǎn)換還是縮減轉(zhuǎn)換,只是產(chǎn)生元數(shù)據(jù)的一個副本,轉(zhuǎn)換結(jié)果對元數(shù)據(jù)沒有影響。
1)將字符串轉(zhuǎn)化為整型;
int i = Integer.parseInt(String str);
int i = Integer.valueOf(String str).intValue();
注:Integer.parseInt和 Integer.valueOf 不同,前者生成的是整型,而后者是一個對象,所以要通過intValue()來獲得對象的值;
字串轉(zhuǎn)成 Double, Float, Long 的方法大同小異.
2) 整型轉(zhuǎn)化為字符串:
String str = String.valueOf(int i);
String str = Integer.toString(int i);
String str = “” + i ;
注: Double, Float, Long 的方法大同小異.
3) Long轉(zhuǎn)化為date:
SimpleDateFormat sf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//tieml,timef是long,前面轉(zhuǎn)化過來的
Date date = new Date(timel - timef);
String time = sf.parse(date);
1、float型轉(zhuǎn)換為double型:
float f1=100.00f;
Float F1=new Float(f1);
//F1.doubleValue()為Float類的返回double值型的方法
double d1=F1.doubleValue();
2、double型轉(zhuǎn)換為int型:
double d1=100.00;
Double D1=new Double(d1);
int i1=D1.intValue();
3、int型轉(zhuǎn)換為double型:
int i1=200;
double d1=i1;
(2). 字符串與其它數(shù)據(jù)類型的轉(zhuǎn)換
4、字符串與其它類型間的轉(zhuǎn)換:
⑴其它類型向字符串的轉(zhuǎn)換
①調(diào)用類的串轉(zhuǎn)換方法:X.toString();
②自動轉(zhuǎn)換:X+“”;
③使用String的方法:String.valueOf(X);
⑵字符串作為值,向其它類型的轉(zhuǎn)換
①先轉(zhuǎn)換成相應(yīng)的封裝器實例,再調(diào)用對應(yīng)的方法轉(zhuǎn)換成其它類型
例如,字符中“32.1”轉(zhuǎn)換double型的值的格式為:new Float(“32.1”).doubleValue()。
也可以用:Double.valueOf(“32.1”).doubleValue()
②靜態(tài)parseXXX方法
String s = "1";
byte b = Byte.parseByte( s );
short t = Short.parseShort( s );
int i = Integer.parseInt( s );
long l = Long.parseLong( s );
Float f = Float.parseFloat( s );
Double d = Double.parseDouble( s );
③Character的getNumericValue(char ch)方法
返回指定的 Unicode 字符表示的 int 值。
(3). 其它實用數(shù)據(jù)類型轉(zhuǎn)換
5.Date類與其它數(shù)據(jù)類型的相互轉(zhuǎn)換
整型和Date類之間并不存在直接的對應(yīng)關(guān)系,只是你可以使用int型為分別表示年、月、日、時、分、秒,這樣就在兩者之間建立了一個對應(yīng)關(guān)系,在作這種轉(zhuǎn)換時,你可以使用Date類構(gòu)造函數(shù)的三種形式:
①Date(int year, int month, int date):以int型表示年、月、日
②Date(int year, int month, int date, int hrs, int min):以int型表示年、月、日、時、分
③Date(int year, int month, int date, int hrs, int min, int sec):以int型表示年、月、日、時、
分、秒
在長整型和Date類之間有一個很有趣的對應(yīng)關(guān)系,就是將一個時間表示為距離格林尼治標(biāo)準(zhǔn)時間1970年1月1日0時0分0秒的毫秒數(shù)。對于這種對應(yīng)關(guān)系,Date類也有其相應(yīng)的構(gòu)造函數(shù):Date(long date)。
獲取Date類中的年、月、日、時、分、秒以及
星期你可以使用Date類的getYear()、getMonth()、getDate()、getHours()、getMinutes()、getSeconds()、getDay()方法,你也可以將其理解為將Date類轉(zhuǎn)換成int。
而Date類的getTime()方法可以得到我們前面所說的一個時間對應(yīng)的長整型數(shù),與包裝類一樣,Date類也有一個toString()方法可以將其轉(zhuǎn)換為String類。
有時我們希望得到Date的特定格式,例如20020324,我們可以使用以下方法,首先在文件開始引入,
import java.text.SimpleDateFormat;
import java.util.*;
java.util.Date date = new java.util.Date();
//如果希望得到Y(jié)YYYMMDD的格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMDD");
String dateFormat=sdf.format(date);
//如果希望分開得到年,月,日
SimpleDateFormat sy=newSimpleDateFormat("yyyy");
SimpleDateFormat sm=new SimpleDateFormat("MM");
SimpleDateFormat sd=new SimpleDateFormat("dd");
String syear=sy.format(date);
String smon=sm.format(date);
String sday=sd.format(date);
//js中將Data轉(zhuǎn)換成String類型
* 對Date的擴(kuò)展,將 Date轉(zhuǎn)化為指定格式的String
* 月(M)、日(d)、12小時(h)、24小時(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2個占位符
* 年(y)可以用 1-4 個占位符,毫秒(S)只能用 1 個占位符(是 1-3位的數(shù)字)
*eg:
* (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") ==>2006-07-0208:09:04.423
* (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==>2009-03-10 二20:09:04
* (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==>2009-03-10 周二08:09:04
* (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss")==> 2009-03-10 星期二08:09:04
* (new Date()).pattern("yyyy-M-d h:m:s.S") ==>2006-7-2 8:9:4.
6.字符型轉(zhuǎn)時間型:(2005-10-1)
reportdate_str = “2005-10-01”;
reportdate_str = reportdate_str + “ 00:00:00.0”
reportdate = java.sql.Timestamp.valueOf(reportdate_str);
7.時間型轉(zhuǎn)字符型:
V_DATE = reportdate.toString();
8.將long型轉(zhuǎn)化為String型
long APP_UNIT = (long)userview.getDEPT_ID();
String S_APP_UNIT = String.valeOf(APP_UNIT);
基本類型s都可以通過String.valueof(s)來轉(zhuǎn)化為String型。
JAVA中常用數(shù)據(jù)類型轉(zhuǎn)換函數(shù)
雖然都能在JAVA API中找到,整理一下做個備份。string->byte
Byte static byte parseByte(String s) byte->string
Byte static String toString(byte b)char->string
Character static String to String (char c)string->Short
Short static Short parseShort(String s)Short->String
Short static String toString(Short s)String->Integer
Integer static int parseInt(String s)Integer->String
Integer static String tostring(int i)String->Long
Long static long parseLong(String s)Long->String
Long static String toString(Long i)String->Float
Float static float parseFloat(String s)Float->String
Float static String toString(float f)String->Double
Double static double parseDouble(String s)Double->String
Double static String toString(Double)
數(shù)據(jù)類型
基本類型有以下四種:
int長度數(shù)據(jù)類型有:byte(8bits)、short(16bits)、int(32bits)、long(64bits)、
float長度數(shù)據(jù)類型有:單精度(32bits float)、雙精度(64bits double)
boolean類型變量的取值有:ture、false
char數(shù)據(jù)類型有:unicode字符,16位
對應(yīng)的類類型:Integer、Float、Boolean、Character、Double、Short、Byte、Long
轉(zhuǎn)換原則
從低精度向高精度轉(zhuǎn)換
byte 、short、int、long、float、double、char
注:兩個char型運算時,自動轉(zhuǎn)換為int型;當(dāng)char與別的類型運算時,也會先自動轉(zhuǎn)換為int型的,再做其它類型的自動轉(zhuǎn)換
基本類型向類類型轉(zhuǎn)換
正向轉(zhuǎn)換:通過類包裝器來new出一個新的類類型的變量
Integer a= new Integer(2);
反向轉(zhuǎn)換:通過類包裝器來轉(zhuǎn)換
int b=a.intValue();
類類型向字符串轉(zhuǎn)換
正向轉(zhuǎn)換:因為每個類都是object類的子類,而所有的object類都有一個toString()函數(shù),所以通過toString()函數(shù)來轉(zhuǎn)換即可
反向轉(zhuǎn)換:通過類包裝器new出一個新的類類型的變量
eg1: int i=Integer.valueOf(“123”).intValue()
說明:上例是將一個字符串轉(zhuǎn)化成一個Integer對象,然后再調(diào)用這個對象的intValue()方法返回其對應(yīng)的int數(shù)值。
eg2: float f=Float.valueOf(“123”).floatValue()
說明:上例是將一個字符串轉(zhuǎn)化成一個Float對象,然后再調(diào)用這個對象的floatValue()方法返回其對應(yīng)的float數(shù)值。
eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
說明:上例是將一個字符串轉(zhuǎn)化成一個Boolean對象,然后再調(diào)用這個對象的booleanValue()方法返回其對應(yīng)的boolean數(shù)值。
eg4:double d=Double.valueOf(“123”).doubleValue()
說明:上例是將一個字符串轉(zhuǎn)化成一個Double對象,然后再調(diào)用這個對象的doubleValue()方法返回其對應(yīng)的double數(shù)值。
eg5: long l=Long.valueOf(“123”).longValue()
說明:上例是將一個字符串轉(zhuǎn)化成一個Long對象,然后再調(diào)用這個對象的longValue()方法返回其對應(yīng)的long數(shù)值。
eg6: char=Character.valueOf(“123”).charValue()
說明:上例是將一個字符串轉(zhuǎn)化成一個Character對象,然后再調(diào)用這個對象的charValue()方法返回其對應(yīng)的char數(shù)值。
基本類型向字符串的轉(zhuǎn)換
正向轉(zhuǎn)換:
如:
int a=12;
String b;b=a+””;
反向轉(zhuǎn)換:
通過類包裝器
eg1:int i=Integer.parseInt("123")
說明:此方法只能適用于字符串轉(zhuǎn)化成整型變量
eg2: float f=Float.valueOf(“123”).floatValue()
說明:上例是將一個字符串轉(zhuǎn)化成一個Float對象,然后再調(diào)用這個對象的floatValue()方法返回其對應(yīng)的float數(shù)值。
eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
說明:上例是將一個字符串轉(zhuǎn)化成一個Boolean對象,然后再調(diào)用這個對象的booleanValue()方法返回其對應(yīng)
的boolean數(shù)值。
eg4:double d=Double.valueOf(“123”).doubleValue()
說明:上例是將一個字符串轉(zhuǎn)化成一個Double對象,然后再調(diào)用這個對象的doubleValue()方法返回其對應(yīng)的double數(shù)值。
eg5: long l=Long.valueOf(“123”).longValue()
說明:上例是將一個字符串轉(zhuǎn)化成一個Long對象,然后再調(diào)用這個對象的longValue()方法返回其對應(yīng)的long數(shù)值。
eg6: char=Character.valueOf(“123”).charValue()
說明:上例是將一個字符串轉(zhuǎn)化成一個Character對象,然后再調(diào)用這個對象的charValue()方法返回其對應(yīng)的char數(shù)值。
本文通過時間數(shù)值的處理來研究一下數(shù)據(jù)類型的自動轉(zhuǎn)換。我們知道:System.currentTimeMillis();返回的是long類型的數(shù)值。當(dāng)計算時間相加的時候,如果不注意數(shù)據(jù)類型的自動轉(zhuǎn)換,則很容易出現(xiàn)問題,如下所示:
Date expiration = new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 365 * 5);
上面例子本意是求5年后的過期時間,而實際輸出的結(jié)果卻比當(dāng)前時間還早的時間值。究其原因是java數(shù)值計算過程中發(fā)生的溢出。為什么會出現(xiàn)溢出呢?java不是存在數(shù)據(jù)類型自動轉(zhuǎn)換嗎?轉(zhuǎn)換規(guī)則如下所示:
低————————————–>高
byte,short,char->int->long->float->double
在運算中,不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一類型,然后進(jìn)行運算。雖然java中存在數(shù)據(jù)類型自動轉(zhuǎn)換,但是需要注意的是:各運算符是有優(yōu)先級的,乘法的運算優(yōu)先級要高于加法,因此,java會執(zhí)行完乘法運算后再執(zhí)行加法運行。而執(zhí)行乘法運算時,所有的操作數(shù)都是int型,因此沒有觸發(fā)自動類型轉(zhuǎn)換,運算的結(jié)果自然是int型的,所以導(dǎo)致1000 * 60 * 60 * 24 * 365 * 5在計算過程中發(fā)生溢出。知道了原因就好辦了,可以在乘法運算時進(jìn)行一次強(qiáng)制類型轉(zhuǎn)換:
Date expiration = new Date(System.currentTimeMillis() + 1000L * 60 * 60 * 24 * 365 * 5);
從而可以獲得正確的過期時間。
java避開基本數(shù)據(jù)類型轉(zhuǎn)換列表陷阱
在開發(fā)過程中經(jīng)常會使用Arrays和Collections這兩個工具類在數(shù)組和列表之間進(jìn)行轉(zhuǎn)換,使用起來非常方便,但有時候會不小心陷入陷阱里面,看代碼
public static void main(String[] args) { int[] data = {1,2,3,4,5}; List list = Arrays.asList(data); System.out.println(list.size()); }
文章標(biāo)題:Java數(shù)據(jù)類型及類型轉(zhuǎn)換實現(xiàn)互相轉(zhuǎn)換-創(chuàng)新互聯(lián)
文章鏈接:http://www.rwnh.cn/article36/jdppg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站內(nèi)鏈、虛擬主機(jī)、全網(wǎng)營銷推廣、靜態(tài)網(wǎng)站、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容