1. 程式人生 > >java 資料型別轉換

java 資料型別轉換


JDK1.7

啊啊啊啊。今天想把int[]轉換為String的時候被坑了。一看有個toString().走起。額。“[[email protected]”轉換出來什麼鬼。好吧。原始碼一看。原來是Object類的實現方法。我們都知道Object是所有類的父類或間接父類。本身沒有實現肯定會向上呼叫Object的toString方法。

所以返回值就是這個。好了下面看一下型別轉換的幾種方式。

用的比較多的就是(Integer或int)與String之間的轉換

                //1
		int a=889343;
		String str=String.valueOf(a);
		//2
		String str1=a+"";
		
		//3
		Integer it=234214;
		String str2=it.toString();
		//4
		String str3=it+"";
其實他們都依賴Integer的toString()方法。
public static String valueOf(int i) {
        return Integer.toString(i);
    }

public static String toString(int i) {
        if (i == Integer.MIN_VALUE)
            return "-2147483648";
        int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
        char[] buf = new char[size];
        getChars(i, size, buf);
        return new String(buf, true);
    }

OK。那如何從String轉為int。(Integer和int屬於java語法糖的內容。在編譯期的語義分析和生成位元組碼階段將會進行轉換也就是自動拆箱與裝箱)。

                String str4="234";
		int z=Integer.valueOf(str4);
		int x=Integer.parseInt(str4);

為什麼同樣的功能要兩個函式來實現呢。

public static Integer valueOf(String s) throws NumberFormatException {
        return Integer.valueOf(parseInt(s, 10));
    }
public static int parseInt(String s) throws NumberFormatException {
        return parseInt(s,10);
    }


可以發現valueOf其實使用parseInt方法的返回值當作引數進行處理的。
另外兩個方法的返回值是不同的。基本資料型別是在棧上分配的。
而Integer面向物件的設計需要他在堆上分配記憶體。小數值建立和死亡又是非常頻繁的行為。
頻繁的操作將會使物件在堆上分配和GC造成不必要的資源損耗。所以通過享元模式進行優化。
在常量池中儲存物件。當常量池存在此物件時不在建立物件直接把引用指向物件就可以
public static Integer valueOf(int i) {         
           assert IntegerCache.high >= 127;       
           if (i >= IntegerCache.low && i <= IntegerCache.high)            
                   return IntegerCache.cache[i + (-IntegerCache.low)];        
           return new Integer(i);     
} 

可以看到儲存的物件最大到127.這也就是

                Integer it=127;
		Integer it1=127;
		System.out.println(it==it1);
		
		Integer it3=128;
		Integer it4=128;
		System.out.println(it3==it4);
第一個會成功,第二個失敗的原因。額寫的可能有點亂。大家見諒吧。

相關推薦

Java SE基礎部分--02.Java資料型別轉換、運算子、方法入門

學習目標: 1、資料型別轉換、 2、算數運算子、 3、賦值運算子、 4、比較運算子、 5、邏輯運算子、 6、三元運算子、 7、方法定義和呼叫 一、資料型別轉換: 1、資料型別轉換分為:隱式型別轉換、強制型別轉換。 隱式轉換:是將容量小的型別自動轉成容量大的

有關Java資料型別轉換

資料型別轉換 話不多說,先來圖片 基本資料型別與引用資料型別 基本:boolean, char,byte,short,int,long,float,double 引用:String,引用型別具體可分為:陣列、類和介面 隱式轉換 隱式轉換也叫作自動型別轉換

Java資料型別轉換知識與字串和整形的互相轉換

一、資料型別 八大基本型別(想具體研究資料型別的可以參考這個網站:https://blog.csdn.net/u014266877/article/details/54374867?utm_source=copy): byte:8位,最大儲存資料量是255,存放的資料範圍是-128~127之

Java資料型別轉換(自動轉換和強制轉換

自動資料型別轉換 自動轉換按從低到高的順序轉換。不同型別資料間的優先關係如下: 低———————————————>高 byte,short,char-> int -> long -> float -> doub

JAVA資料型別轉換大全

星期你可以使用Date類的getYear()、getMonth()、getDate()、getHours()、getMinutes()、getSeconds()、getDay()方法,你也可以將其理解為將Date類轉換成int。 而Date類的getTime()方法可以得到我們前面所說的一個時間對應的長

Java-資料型別轉換

自動轉換 目的型別比原來的型別要大 兩種型別是相互相容的 byte->short short->int char->int int->long int->double float->double 關於兩個數計

(詳解)Java資料型別轉換以及精度損失的問題

在Java語言基礎中, 資料型別分為基本資料型別和引用資料型別. 在這裡, 從計算機底層(二進位制的層面)介紹和分析基本資料型別(也就是四類八種)的轉換. 而且轉換分為兩種 -- 隱式轉換和強制轉換. 隱式轉換     A: 案例演示         a: int + i

java 資料型別轉換

JDK1.7 啊啊啊啊。今天想把int[]轉換為String的時候被坑了。一看有個toString().走起。額。“[[email protected]”轉換出來什麼鬼。好吧。原始碼一看。原來是Object類的實現方法。我們都知道Object是所有類的父類或間接父

java資料型別型別轉換(必須清楚)

資料型別分類: 主要分為 基本型別、引用型別兩大類;   基本型別 轉換原則  型別轉換主要在在 賦值、方法呼叫、算術運算 三種情況下發生。  另外還有是直接數的賦值:先通過直接數判斷其型別,然後基本原則和上面談到的賦值

java中的基本資料型別轉換

1.java中的基本資料型別轉換 java基本資料型別的轉換是需要兩個基本事項: 1.boolean型不進行型別轉換。 2.Java中基本資料型別按精度從“低”到“高”排列順序     byte  short  char  int&

java基礎複習第二天——基本資料型別,引用資料型別資料型別轉換,運算子

目錄 1.基本資料型別(4類八種) 2.引用資料型別 3.基本型別和引用型別的區別 4.資料型別轉換 5.運算子 ----------------------------------------------------------------------我是分割線--

Android中JNI使用詳解(4)---Java與C之間資料型別轉換

Jni中基本型別轉換對應的表格 Java型別 本地型別 說明 boolean jboolean 無符號,8位 byte jbyte

java筆試題:關於short s1=1;s1=s1+1;short s1=1;s1+=1;short s3=s1+s2;中存在的簡單資料型別轉換問題的理解

面試題的內容大概是這樣:short s1=1;s1=s1+1;這兩句程式碼有什麼問題?short s1=1;s1+=1;這兩句程式碼有什麼問題?short s1=1,s2=1;short s3=s1+s2;這兩句程式碼有什麼問題? 下面我就對這三個問題按照自己的理解以及參考做出解釋: 解釋之

Java種的基本資料型別轉換(自動、強制、提升)

Java種的8大基本資料型別,以及它們所佔記憶體大小和範圍 1、自動型別轉換 自動型別轉換是指:數字表示範圍小的資料型別可以自動轉換成範圍大的資料型別。 如: long l = 100; int i = 200; long ll = i; 具體自動轉換如如下圖所示:

java 資料型別,運算子,進位制轉換資料結構

Java資料型別 對於java來說,我們將變數分為兩個大類 宣告變數符合以下規則 變數型別 變數名=初值; 使用小駝峰命名; 類級變數命名使用大駝峰; 編碼表:二進位制和生活中文字的對應關係表。 ASCII碼錶:美國統一二進位制轉換編碼表。 GB2312

通過反射轉換java資料型別

最近專案中遇到通過類似hibernate又不是hibernate查詢出來的資料是一個List<Object[]>型別,不是自己想要的key,value型別,然後抽空寫了一個工具類,貌似這樣破壞了java的封裝性,標記一下,有不對的地方歡迎指出來 實體類: &nb

java中的一些資料型別轉換

整理下經常用到的資料型別的轉換,用到最多的一般是數字型別之間的轉換,以及數字型別和字串之間的轉換。 1. int ,Double,Float,Long to String  (1)String s = String.valueOf(i);  (2)String s

java資料型別轉換

自動型別轉換 條件:1,轉換前後的資料型別相容;          2,轉換後的資料型別的表示範圍要比轉換前的大; 自動轉換按從低到高的順序轉換。不同型別資料間的優先關係如下:     低-----------------------------------------

資料型別轉換java

預設轉換(從小到大 /*聯想式理解:從弱變強 因為程式碼的世界是正能量的,所以可以默許蛻變得原來越好哇*/)      byte(1),short(2),char -> int(4) -> long(8) ->float(4)

安卓/java 基本資料型別轉換

public class TypeCastHelper { private static final String DEFAULT_STRING = ""; private static final int DEFAULT_INT = 0; priva