導航:首頁 > 編程語言 > 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賦值相關的資料

熱點內容
pdf格式轉換成jpg器 瀏覽:542
迅雷雲盤文件夾怎麼取 瀏覽:111
微信里的游戲屬於什麼伺服器 瀏覽:944
cass自由連接命令設置 瀏覽:508
九代雅閣冬天開空調壓縮機啟動嗎 瀏覽:967
充氣壓縮機充電 瀏覽:84
程序員周五忙么 瀏覽:437
海康威視sip伺服器地址 瀏覽:163
挖掘機程序員哪個好 瀏覽:458
方舟怎麼進上一次進的伺服器 瀏覽:635
pdf怎樣剪切 瀏覽:906
git編譯所有文件命令 瀏覽:694
偽軍pdf 瀏覽:418
如何判斷基本命令 瀏覽:972
pdf批量刪除 瀏覽:943
廣播android靜態動態區別 瀏覽:390
centos7設置為命令行啟動 瀏覽:570
程序員資質資格證 瀏覽:217
常見編碼加密 瀏覽:236
阿狸免費雲伺服器 瀏覽:764