首页编程java编程java double是什么类型(java中float和double的取值范围是什么)

java double是什么类型(java中float和double的取值范围是什么)

编程之家2023-10-1394次浏览

大家好,今天来为大家分享java double是什么类型的一些知识点,和java中float和double的取值范围是什么的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

java double是什么类型(java中float和double的取值范围是什么)

Java中的Long和Double类型

Java中的原子操作包括:

1)除long和double之外的基本类型的赋值操作

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

java double是什么类型(java中float和double的取值范围是什么)

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)

java double是什么类型(java中float和double的取值范围是什么)

举个例子来说:(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中float和double的取值范围是什么

float:4字节(32bit),IEEE 754.取值范围:

[-3.40282346638528860e+38,-1.40129846432481707e-45]∪ [1.40129846432481707e-45~ 3.40282346638528860e+38]。

double: 8字节(64bit),IEEE 754.取值范围:

[-1.79769313486231570e+308,-4.94065645841246544e-324]∪ [4.94065645841246544e-324,1.79769313486231570e+308]。

扩展资料

基本数据类型的特点,位数,最大值和最小值。

1、

基本类型:short二进制位数:16

包装类:java.lang.Short

最小值:Short.MIN_VALUE=-32768(-2的15此方)

最大值:Short.MAX_VALUE=32767(2的15次方-1)

2、

基本类型:int二进制位数:32

包装类:java.lang.Integer

最小值:Integer.MIN_VALUE=-2147483648(-2的31次方)

最大值:Integer.MAX_VALUE= 2147483647(2的31次方-1)

3、

基本类型:long二进制位数:64

包装类:java.lang.Long

最小值:Long.MIN_VALUE=-9223372036854775808(-2的63次方)

最大值:Long.MAX_VALUE=9223372036854775807(2的63次方-1)

4、

基本类型:float二进制位数:32

包装类:java.lang.Float

最小值:Float.MIN_VALUE=1.4E-45(2的-149次方)

最大值:Float.MAX_VALUE=3.4028235E38(2的128次方-1)

5、

基本类型:double二进制位数:64

包装类:java.lang.Double

最小值:Double.MIN_VALUE=4.9E-324(2的-1074次方)

最大值:Double.MAX_VALUE=1.7976931348623157E308(2的1024次方-1)

参考资料:Java官网-Java教程

javafloat和double的区别

float与double的区别

单精度浮点数在机内占4个字节,用32位二进制描述。

双精度浮点数在机内占8个字节,用64位二进制描述。

浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。

数符占1位二进制,表示数的正负。

指数符占1位二进制,表示指数的正负。

尾数表示浮点数有效数字,0.xxxxxxx,但不存开头的0和点

指数存指数的有效数字。

指数占多少位,尾数占多少位,由计算机系统决定。

可能是数符加尾数占24位,指数符加指数占8位-- float.

数符加尾数占48位,指数符加指数占16位-- double.

知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是你想知道的数值范围。

对编程人员来说,double和 float的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,java语言中数学函数名称double和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)

double java默认初值

基本数据类型作为类的成员时,

即使没有对其进行初始化,

java也会确保它有一个默认值,如下:

基本类型的初始值基本类型默认值

boolean false

char\u0000(null)

byte(byte)0

short(short)0

int 0

long 0L

float 0.0f

double 0.0d

上面的默认值,是当变量作为类的成员使用时才有的,

java这样做是保证基本类型的成员变量得到初始化,

防止产生程序错误,

但这些值在实际的程序中可能都是不合理的,

所以最好明确的给出初始值。

上面的默认值对在程序中非成员变量就不适用了,

非成员变量如果不明确给出初始值,就可能是任何值。

在java程序编译时会提示你一个错误,而不是c++中的警告。

至于那些应用类型,像数组,对象啦,有些复杂,根据你的类型而定,对象一般弄人为null,

数组根据你的类型,按照基本数据类型的默认值来初始化……

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yongpang/archive/2008/01/30/2073765.aspx

关于本次java double是什么类型和java中float和double的取值范围是什么的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

什么的火球 什么的太阳像一个什么的火球简述java构造函数的作用是什么意思?java类中的构造函数有什么作用