導航:首頁 > 編程語言 > javalong賦值

javalong賦值

發布時間:2025-03-15 01:38:56

A. java中long和Long有什麼區別

long是基本類型,Long是long的包裝類

在java中有時候的運算必須是兩個類對象之間進行的,不充許對象與數字之間進行運算。所以需要有一個對象,這個對象把數字進行了一下包裝,這樣這個對象就可以和另一個對象進行運算了。

比如我們也可以定義一個類:

classLong{
longi=0;
publicLong(longi){
this.i=i;
}
}

這樣這個Long就是一個包裝類,他包裝了一個整數值,然後可以在裡面寫一些運算符重載的方法使它支持某些運算。這個時候可以賦值:
Long it=new Long(10);
現在變數it就是一個對象,不是一個數字。

B. Java中的Long和Double類型

Java中的原子操作包括:
1)除long和double之外的基本類型的賦值操作

2)所有引用reference的賦值操作

3)java.concurrent.Atomic.* 包中所有類的一切操作。

但是java對long和double的賦值操作是非原子操作!!long和double佔用的位元組數都是8,也就是64bits。在32位操作系統上對64位的數據的讀寫要分兩步完成,每一步取32位數據。這樣對double和long的賦值操作就會有問題:如果有兩個線程同時寫一個變數內存,一個進程寫低32位,而另一個寫高32位,這樣將導致獲取的64位數據是失效的數據。因此需要使用volatile關鍵字來防止此類現象。volatile本身不保證獲取和設置操作的原子性,僅僅保持修改的可見性。但是java的內存模型保證聲明為volatile的long和double變數的get和set操作是原子的。(from
http://www.iteye.com/topic/213794)

舉個例子來說:(example is from
http://stackoverflow.com/questions/17481153/long-and-double-assignments-are-not-atomic-how-does-it-matter)

public class UnatomicLong implements Runnable {

private static long test = 0;

private final long val;

public UnatomicLong(long val) {

this.val = val;

}

@Override

public void run() {

while (!Thread.interrupted()) {

test = val;
//兩個線程都試圖將自己的私有變數val賦值給類私有靜態變數test

}

}

public static void main(String[] args) {

Thread t1 = new Thread(new
UnatomicLong(-1));

Thread t2 = new Thread(new
UnatomicLong(0));

System.out.println(Long.toBinaryString(-1));

System.out.println(pad(Long.toBinaryString(0),
64));

t1.start();

t2.start();

long val;

while ((val = test) == -1
|| val == 0) {

//如果靜態成員test的值是-1或0,說明兩個線程操作沒有交叉

}

System.out.println(pad(Long.toBinaryString(val), 64));

System.out.println(val);

t1.interrupt();

t2.interrupt();

}

// prepend 0s to the string to make it the target
length

private static String pad(String s, int targetLength) {

int n = targetLength - s.length();

for (int x = 0; x < n; x++) {

s = "0" + s;

}

return s;

}

}

閱讀全文

與javalong賦值相關的資料

熱點內容
絕對的命令漫畫 瀏覽:436
python爬蟲數據分析教材 瀏覽:764
php內存消耗 瀏覽:985
雲伺服器ip分享 瀏覽:725
svn沖突解決命令行 瀏覽:760
廣西話搞笑配音是什麼app 瀏覽:425
單片機什麼是高位 瀏覽:941
php中執行js 瀏覽:242
電腦另存時不自動加密 瀏覽:544
matlab信賴域演算法 瀏覽:425
互聯網編程難嗎 瀏覽:392
c語言演算法書籍 瀏覽:529
3D圖怎麼加密 瀏覽:944
單片機程序圖片 瀏覽:189
剪應力計演算法 瀏覽:823
如何自己搭建url跳轉伺服器 瀏覽:988
廣數980tb3用g83鑽孔怎麼編程 瀏覽:581
程序員上海與北京 瀏覽:412
安卓手機的動態照片為什麼卡 瀏覽:544
ad編譯集成庫時最常見的問題 瀏覽:852