java中long是什么意思(java中数据类型long和Long的区别)
今天给各位分享java中long是什么意思的知识,其中也会对java中数据类型long和Long的区别进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
java如何定义long类型的变量
我详细说说吧
java中直接输入整数则默认为int类型,带有小数点的实数默认为double类型
如果你直接声明 long a= 123;这是没有错的,因为123是int类型,可以赋值给范围更大的long类型,但是如果你的数字超过int范围那得告诉编译器,你的数字已经大于int范围,要换成更大范围的long类型表示,所以数字后面加上L(或小写l)。比如 long a= 2147483648;(这样写会报错,因为int类型最大表示范围是2147483647)得这样 long a= 2147483648L;
浮点数一样,后面加的是F/f(代表float类型)
java中数据类型long和Long的区别
long和Long的区别,可以从以下几点进行区分:
二者的定义是不同的,小写的long指的是基本类型,大写的Long指的是对象类型又称为包装类。
虽然二者均属于Java的一种数据类型,但是long这一基本数据类型是不能new一个对象的,为了弥补Java这方面的缺陷,因此就出现了Long包装类这一对象数据类型,可以说对象类型是对基本类型的一大补充。
小写的long有默认值(),object一般默认为null,所以大写的Long中出现的一些方法就是为了满足小写long的需求。
区分二者的方法:
牢记二者的定义,利用定义去区分;
多多运用这两个数据类型,在练习中熟练掌握两个数据类型;
多参与项目实战,在实战项目中积累经验,对二者进行区分。
备注:在使用这两个数据类型的时候会用到泛类,所以一定要掌握泛类的一些规定:
泛型的参数类型也可以是通配符类型;
同一种泛型可以对应多个版本,但是不同版本的泛型类之间是不能兼容的。
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;
}
}
Java中long和Long有什么区别
long是基本类型,Long是对象类型;Long又叫 long的包装类,
你的代码中,用到了泛型,关于泛型的规定:
1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上称为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class<?> classType= Class.forName(java.lang.String);
请看第一条关于泛型的要求,其参数必须是类类型的,意味着,LinkedHashMap<Object,Long> cache=new LinkedHashMap<Object,Long>();中的参数类型,必须采用表示类类型的Long.
文章到此结束,如果本次分享的java中long是什么意思和java中数据类型long和Long的区别的问题解决了您的问题,那么我们由衷的感到高兴!