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

熱點內容
深圳好的程序員培訓機構 瀏覽:923
nmap命令解說 瀏覽:345
雲伺服器怎麼能關掉 瀏覽:758
美團app如何下預定單 瀏覽:618
語法新思維pdf 瀏覽:143
為什麼雲伺服器桌面太卡 瀏覽:734
程序員第一年感覺什麼都不會 瀏覽:9
積分方程pdf 瀏覽:284
解壓最後窗口 瀏覽:767
圖書下載pdf 瀏覽:142
切換到root命令 瀏覽:733
人臉摳圖去重演算法 瀏覽:246
找靚機app如何清空 瀏覽:418
安卓系統怎麼訪問ftp伺服器地址 瀏覽:88
java開發游戲伺服器 瀏覽:642
如何找到安卓系統的重要文件 瀏覽:616
歷史流通盤源碼 瀏覽:266
為什麼要用伺服器集群 瀏覽:302
排序演算法掌握幾個 瀏覽:165
來跟我一起做解壓手帳吧 瀏覽:383