亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java 數據類型及類型轉換實現互相轉換

發布時間:2020-10-29 20:24:35 來源:億速云 閱讀:693 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關Java 數據類型及類型轉換實現互相轉換,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一、基本數據類型

java的數據類型可以分為兩大類:基本類型和復合類型。

基本類型:整型(int,short,long,byte)、浮點型(float,double)、布爾型(boolean)、和字符型(char)

復合類型:數組,類,接口

1.整型

各種整型數據所占空間及數的范圍

數據類型所占內存空間/位數的范圍
byte8-128~127
short16-32768~32767
int32-2^31~2^31-1
long64-2^63~2^63-1

整型以補碼的形式存放在內存中。

2.浮點型

浮點類型所占的位數及數值范圍

數據類型所占內存空間/位有效數字數值范圍
float327個十進制位約+-3.4x10^38
double6415~16個十進制位約+-1.8x10^308

3.字符型

用char表示。2字節(16位)來存放一個字符,并且存放的不是ASCII碼是Unicode碼。

4.布爾型

用boolean表示。只有兩個取值true和false。

二、常量

常量包含整型常量,浮點型常量,字符型常量,字符串常量以及布爾常量,符號常量(用final來定義 eg final int MALE = 1;)

1.整型常量

十進制(正數,負數,0),八進制(以0開頭)和十六進制(以0x或0x開頭)

2.浮點型常量

浮點型常量有兩種表示形式。

普通的十進制數形式。由數字和小數組成。如0.123;123.0;0.0;.123;123.都是合法的

指數形式。1.5E5表示1.5x10^5;2.9E-7表示2.9x10^-7。注意字母E(也可以是小寫e)之前必須有數字,且E后面的指數必須是整數。如E3,2E1.7均不合法。

java規定浮點數默認雙精度,如果需要指定單精度,需要在末尾加上F或f.比如12.5F,2E5f。

三、變量

java用來表示變量名、常量名、方法名、類名的有效字符序列都成為用戶自定義標識符,簡稱標識符。eg:int a = 1;a就是一個標識符。

變量包含整型變量,浮點型變量,字符變量,布爾型變量。

1.浮點型變量

浮點數的采用二進制方式存儲的,二進制浮點數往往不能精確表示一個十進制小數,即使這個小數是一個有限小數,比如1.3,它在內存中也是一個無限小數,即可能是1.299999,也可能是1.300001。所以盡量避免直接比較兩個浮點數是否精確相等。通常的方法是比較兩個兩個浮點數的差值是否足夠接近0。

2.字符變量

將一個字符存放到字符變量中,實際上并不是把該字符本身存放到內存單元內,而是將該字符的Unicode碼存放到內存單元中。比如字符‘A'的Unicode嗎是0x0041,它會以二進制存儲在內存中。

它的存儲類型和short很相似,其實Java確實將字符變量作為無符號的短整型數據來處理的,這就決定了Java中的字符數據和整型數據之間可以通用。用戶對可以對字符型數據進行算數運算,此時相當于將它的Unicode碼看成一個整數進行運算。

Java規定一個局部變量在使用之前必須要初始化,否則無法通過編譯。局部變量指的是定義在方法里的變量,它只有在方法里有效,在方法外無法使用。

四、數據類型轉換

轉換基本規則:范圍小的轉為范圍大的,精度小的轉為精度大的。按照數據轉換時是否有會損失精度,Java中的轉換分為擴展轉換和縮減轉換。

1.擴展轉換

原類型目的類型
byteshort,int,long,float,double
shortint,long,float,double
charint,long,float,double
intlong,float,,double
longfloat,double
floatdouble

eg:byte+int —— int+int;int+double —— double+double

Java規定,如果兩個數據類型沒出現在同一行的兩列,則兩個數據都必須轉換成同一類型,若這個目的類型有多個可以選擇,則選精度,范圍最小的那個。

eg: byte+char —— int+int。

擴展轉換是系統自動進行的,又稱自動類型轉換,不會損失精度。

2.縮減轉換

Java規定凡是符合下表的轉換,稱為縮減轉換。這種轉換會損失精度,系統不會自動進行,需要程序員顯示地指定。

原類型目的類型
shortbyte
charbyte,short
intbyte,short,char
longbyte,short,char,int
floatbyte,short,char,int,long
doublebyte,short,char,int,long,float

要將第一列的數據轉換成第二列的數據類型,必須使用強制類型轉化。基本格式:(數據類型)數據

eg: int a —— (byte)a

強制類型轉換也可用在擴展轉換中,使閱讀更清晰。

eg: long+int+byte —— long+(long)int+(long)byte

注意:無論擴展轉換還是縮減轉換,只是產生元數據的一個副本,轉換結果對元數據沒有影響。

五、JAVA數據類型轉換大全

1)將字符串轉化為整型;

int i = Integer.parseInt(String str);
int i = Integer.valueOf(String str).intValue();

注:Integer.parseInt和 Integer.valueOf 不同,前者生成的是整型,而后者是一個對象,所以要通過intValue()來獲得對象的值;
字串轉成 Double, Float, Long 的方法大同小異.

2) 整型轉化為字符串:

String str = String.valueOf(int i);
String str = Integer.toString(int i);
String str = “” + i ;

注: Double, Float, Long 的方法大同小異.

3) Long轉化為date:

SimpleDateFormat sf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//tieml,timef是long,前面轉化過來的
Date date = new Date(timel - timef);
String time = sf.parse(date);

1、float型轉換為double型:

float f1=100.00f;
Float F1=new Float(f1);
//F1.doubleValue()為Float類的返回double值型的方法
double d1=F1.doubleValue();

2、double型轉換為int型:

double d1=100.00;
Double D1=new Double(d1);
int i1=D1.intValue();

3、int型轉換為double型:

int i1=200;
double d1=i1;

(2). 字符串與其它數據類型的轉換

4、字符串與其它類型間的轉換:

⑴其它類型向字符串的轉換

①調用類的串轉換方法:X.toString();
②自動轉換:X+“”;
③使用String的方法:String.valueOf(X);

⑵字符串作為值,向其它類型的轉換

①先轉換成相應的封裝器實例,再調用對應的方法轉換成其它類型

例如,字符中“32.1”轉換double型的值的格式為:new Float(“32.1”).doubleValue()。
也可以用:Double.valueOf(“32.1”).doubleValue()

②靜態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). 其它實用數據類型轉換

5.Date類與其它數據類型的相互轉換

整型和Date類之間并不存在直接的對應關系,只是你可以使用int型為分別表示年、月、日、時、分、秒,這樣就在兩者之間建立了一個對應關系,在作這種轉換時,你可以使用Date類構造函數的三種形式:

①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類之間有一個很有趣的對應關系,就是將一個時間表示為距離格林尼治標準時間1970年1月1日0時0分0秒的毫秒數。對于這種對應關系,Date類也有其相應的構造函數:Date(long date)。
獲取Date類中的年、月、日、時、分、秒以及
星期你可以使用Date類的getYear()、getMonth()、getDate()、getHours()、getMinutes()、getSeconds()、getDay()方法,你也可以將其理解為將Date類轉換成int。
而Date類的getTime()方法可以得到我們前面所說的一個時間對應的長整型數,與包裝類一樣,Date類也有一個toString()方法可以將其轉換為String類。
有時我們希望得到Date的特定格式,例如20020324,我們可以使用以下方法,首先在文件開始引入,

import java.text.SimpleDateFormat;
import java.util.*;
java.util.Date date = new java.util.Date();
//如果希望得到YYYYMMDD的格式
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轉換成String類型
* 對Date的擴展,將 Date轉化為指定格式的String
* 月(M)、日(d)、12小時(h)、24小時(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2個占位符
* 年(y)可以用 1-4 個占位符,毫秒(S)只能用 1 個占位符(是 1-3位的數字)
*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.字符型轉時間型:(2005-10-1)

reportdate_str = “2005-10-01”;
reportdate_str = reportdate_str + “ 00:00:00.0”
reportdate = java.sql.Timestamp.valueOf(reportdate_str);

7.時間型轉字符型:

V_DATE = reportdate.toString();

8.將long型轉化為String型

long APP_UNIT = (long)userview.getDEPT_ID();
String S_APP_UNIT = String.valeOf(APP_UNIT);

基本類型s都可以通過String.valueof(s)來轉化為String型。

JAVA中常用數據類型轉換函數

雖然都能在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)

數據類型

基本類型有以下四種:
int長度數據類型有:byte(8bits)、short(16bits)、int(32bits)、long(64bits)、
float長度數據類型有:單精度(32bits float)、雙精度(64bits double)
boolean類型變量的取值有:ture、false
char數據類型有:unicode字符,16位
對應的類類型:Integer、Float、Boolean、Character、Double、Short、Byte、Long

轉換原則

從低精度向高精度轉換
byte 、short、int、long、float、double、char

注:兩個char型運算時,自動轉換為int型;當char與別的類型運算時,也會先自動轉換為int型的,再做其它類型的自動轉換

基本類型向類類型轉換

正向轉換:通過類包裝器來new出一個新的類類型的變量

Integer a= new Integer(2);

反向轉換:通過類包裝器來轉換

int b=a.intValue();

類類型向字符串轉換

正向轉換:因為每個類都是object類的子類,而所有的object類都有一個toString()函數,所以通過toString()函數來轉換即可
反向轉換:通過類包裝器new出一個新的類類型的變量

eg1: int i=Integer.valueOf(“123”).intValue()

說明:上例是將一個字符串轉化成一個Integer對象,然后再調用這個對象的intValue()方法返回其對應的int數值。

eg2: float f=Float.valueOf(“123”).floatValue()

說明:上例是將一個字符串轉化成一個Float對象,然后再調用這個對象的floatValue()方法返回其對應的float數值。

eg3: boolean b=Boolean.valueOf(“123”).booleanValue()

說明:上例是將一個字符串轉化成一個Boolean對象,然后再調用這個對象的booleanValue()方法返回其對應的boolean數值。

eg4:double d=Double.valueOf(“123”).doubleValue()

說明:上例是將一個字符串轉化成一個Double對象,然后再調用這個對象的doubleValue()方法返回其對應的double數值。

eg5: long l=Long.valueOf(“123”).longValue()

說明:上例是將一個字符串轉化成一個Long對象,然后再調用這個對象的longValue()方法返回其對應的long數值。

eg6: char=Character.valueOf(“123”).charValue()

說明:上例是將一個字符串轉化成一個Character對象,然后再調用這個對象的charValue()方法返回其對應的char數值。

基本類型向字符串的轉換

正向轉換:

如:

int a=12;
String b;b=a+””;

反向轉換:

通過類包裝器

eg1:int i=Integer.parseInt("123")

說明:此方法只能適用于字符串轉化成整型變量

eg2: float f=Float.valueOf(“123”).floatValue()

說明:上例是將一個字符串轉化成一個Float對象,然后再調用這個對象的floatValue()方法返回其對應的float數值。

eg3: boolean b=Boolean.valueOf(“123”).booleanValue()

說明:上例是將一個字符串轉化成一個Boolean對象,然后再調用這個對象的booleanValue()方法返回其對應
的boolean數值。

eg4:double d=Double.valueOf(“123”).doubleValue()

說明:上例是將一個字符串轉化成一個Double對象,然后再調用這個對象的doubleValue()方法返回其對應的double數值。

eg5: long l=Long.valueOf(“123”).longValue()

說明:上例是將一個字符串轉化成一個Long對象,然后再調用這個對象的longValue()方法返回其對應的long數值。

eg6: char=Character.valueOf(“123”).charValue()

說明:上例是將一個字符串轉化成一個Character對象,然后再調用這個對象的charValue()方法返回其對應的char數值。

六、java 數據類型轉換的陷阱

本文通過時間數值的處理來研究一下數據類型的自動轉換。我們知道:System.currentTimeMillis();返回的是long類型的數值。當計算時間相加的時候,如果不注意數據類型的自動轉換,則很容易出現問題,如下所示:

Date expiration = new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 365 * 5);

上面例子本意是求5年后的過期時間,而實際輸出的結果卻比當前時間還早的時間值。究其原因是java數值計算過程中發生的溢出。為什么會出現溢出呢?java不是存在數據類型自動轉換嗎?轉換規則如下所示:

低————————————–>高
byte,short,char->int->long->float->double

在運算中,不同類型的數據先轉化為同一類型,然后進行運算。雖然java中存在數據類型自動轉換,但是需要注意的是:各運算符是有優先級的,乘法的運算優先級要高于加法,因此,java會執行完乘法運算后再執行加法運行。而執行乘法運算時,所有的操作數都是int型,因此沒有觸發自動類型轉換,運算的結果自然是int型的,所以導致1000 * 60 * 60 * 24 * 365 * 5在計算過程中發生溢出。知道了原因就好辦了,可以在乘法運算時進行一次強制類型轉換:

Date expiration = new Date(System.currentTimeMillis() + 1000L * 60 * 60 * 24 * 365 * 5);

從而可以獲得正確的過期時間。

java避開基本數據類型轉換列表陷阱

在開發過程中經常會使用Arrays和Collections這兩個工具類在數組和列表之間進行轉換,使用起來非常方便,但有時候會不小心陷入陷阱里面,看代碼

public static void main(String[] args) {
         int[] data = {1,2,3,4,5};
         List list = Arrays.asList(data);
         System.out.println(list.size());
     }

答案為5 是不是?但是運行代碼看看然而 結果為 1;是不是很意外?很吃驚?

別急,慢慢回答你的疑惑,先看下 Arrays.asList 的底層實現代碼,

 public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
  }

通過看底層源碼,我們知道這個功能是通過泛型實現的,我們也知道java8個基本數據類型是不能泛型化的,在上面的代碼中 Arrays.asList 將數組當做一個整體進行處理了,

為了解決這個問題我們將 代碼稍稍改下就好,將基本數據類型變為包裝類型就解決了

public static void main(String[] args) {
         Integer[] data = {1,2,3,4,5};
         List list = Arrays.asList(data);
         System.out.println(list.size());
     }

下面附送兩個面試陷阱題

面試陷阱1:

byte b1 = 10;
byte b2 = 20;
//錯誤: 不兼容的類型: 從int轉換到byte可能會有損失
//否則,兩個操作數都將轉換為int類型。
byte b3 = b1 + b2 //錯誤,b1+b2是int類型,java的整數默認類型為int,b3是byte類型,二者類型不同,所以出錯
byte b3 = (byte)(b1 + b2); //正確

面試陷阱2:

short s1 = 10; 
s1 = s1 + 12; //錯誤: 不兼容的類型: 從int轉換到short可能會有損失
 
short s2 = 10; 
s2 += 12; // 等同于short s2 = (short)(s2 + (short)1); //正確

看完上述內容,你們對Java 數據類型及類型轉換實現互相轉換有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延庆县| 天峨县| 南漳县| 临城县| 湖州市| 仙桃市| 亳州市| 双柏县| 桐梓县| 塔河县| 西林县| 清苑县| 临朐县| 湖口县| 繁昌县| 商水县| 永胜县| 哈密市| 长治县| 东光县| 蚌埠市| 滦平县| 天津市| 天祝| 徐汇区| 东明县| 确山县| 无棣县| 绍兴市| 马边| 大渡口区| 丰都县| 惠安县| 称多县| 永昌县| 扎囊县| 永安市| 四川省| 开鲁县| 普宁市| 呼图壁县|