基本数据类型

基本数据类型1 八种基本数据类型及取值范围 2 单精度浮点数和双精度浮点数 1 所占的内存不同 单精度浮点数占用 4 个字节 32 位 存储空间来存储一个浮点数 包括符号位 1 位 阶码 8 位 尾数 23 位 而双精度浮点数使用 8 个字节 64 位 存储空间来存储一个浮点数

大家好,我是讯享网,很高兴认识大家。

1.八种基本数据类型及取值范围

在这里插入图片描述
讯享网

2.单精度浮点数和双精度浮点数

1、所占的内存不同

2、所存的数值范围不同

单精度浮点数的数值范围为-3.4E38~3.4E38,而双精度浮点数可以表示的数字的绝对值范围大约是:-2.23E308 ~ 1.79E308。E表示10的多少次方,如3.4E38指的是3.4乘以10的38次方。

3、十进制下的位数不同

3.如何比较浮点数

1、不能使用"=="

double d1 =0.0; for (int i = 1; i <= 11; i++) { 
    d1 +=0.1; } double d2 =0.1 * 11; System.out.println(d1 == d2); 

讯享网

结果:false
2、Math.abs()方法
返回double的绝对值,当绝对值小于设置的阈值(误差),就认为相等

讯享网final double THRESHOLD = .0001; double d1 =0.0; for (int i = 1; i <= 11; i++) { 
    d1 +=0.1; } double d2 =0.1 * 11; if(Math.abs(d1-d2) < THRESHOLD) { 
    System.out.println("d1 和 d2 相等"); } else { 
    System.out.println("d1 和 d2 不等"); } 
BigDecimal a = new BigDecimal("2.00"); BigDecimal b = new BigDecimal("2.0"); System.out.println(a.equals(b)); System.out.println(a.compareTo(b) == 0); 

结果:false true
注意:不能使用equals()方法对两个 BigDecimal 对象进行比较,这是因为 equals() 方法会考虑位数,如果位数不同,则会返回 false
4、什么时候使用"= =“和"equals()”
equals是判断两个变量或者实例指向同一个内存空间的值是不是相同
而==是判断两个变量或者实例是不是指向同一个内存空间

讯享网public class EqualsTest { 
    public static void main(String[] args) { 
    // TODO Auto-generated method stub Integer aaa=new Integer(5); Integer bbb=new Integer(5); int a=10; int b=10; String str1=new String("justice"); String str2=new String("justice"); String str3; str3=str1; System.out.println(aaa==bbb); System.out.println(aaa.equals(bbb)); System.out.println(a==b); System.out.println(str1==str2); System.out.println(str1.equals(str2)); System.out.println(str1==str3); System.out.println(str1.equals(str3)); } } 

结果:在这里插入图片描述
aaa和bbb都是Integer封装类型,是不同的对象,变量存储地址, 所以==结果为false,equals为true

a和b都是基本数据类型,变量存储值,所以==为true,基本数据类型无equals方法(没有意义)

str1和str2都是String类型,属于引用类型,变量存储地址,所以==为false,equals为true

创建str3的时候,str3指向了str1,所以str1和str3的指向同一个地址,存储的数据自然相同,所以均为true
————————————————
版权声明:本文为CSDN博主「不划水的易水寒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/_/article/details/

4.基本类型和包装类型的区别

Java 的每个基本类型都对应了一个包装类型,除了 char->Character,int->Integer,其它皆为基本类型首字母大写

1、包装类型可以为 null,而基本类型不可以
它使得包装类型可以应用于 POJO 中
POJO : Plain Ordinary Java Object,意思是简单无规则的 Java 对象,只有属性字段以及 setter 和 getter 方法。如:

class Writer { 
    private Integer age; public Integer getAge() { 
    return age; } public void setAge(Integer age) { 
    this.age = age; } } 

POJO 的属性必须要用包装类型原因:数据库的查询结果可能是 null,如果使用基本类型的话,因为要自动拆箱(将包装类型转为基本类型,比如说把 Integer 对象转换成 int 值),就会抛出 NullPointerException 的异常。

2、包装类型可用于泛型,而基本类型不可以

因为泛型在编译时会进行类型擦除,最后只保留原始类型,而原始类型只能是 Object 类及其子类——基本类型是个特例。

泛型程序设计(generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。Ada、Delphi、Eiffel、Java、C#、F#、Swift 和 Visual Basic .NET 称之为泛型(generics);ML、Scala 和 Haskell 称之为参数多态(parametric polymorphism);C++ 和 D称之为模板。具有广泛影响的1994年版的《Design Patterns》一书称之为参数化类型(parameterized type)。(详细参见百度百科)

Java泛型深入理解:https://blog.csdn.net/sunxianghuang/article/details/

3、两个包装类型的值可以相同,但却不相等

简单来说就是不是同一个内存空间的值相等

五.自动装箱和自动拆箱

把基本类型转换成包装类型的过程叫做装箱(boxing)。反之,把包装类型转换成基本类型的过程叫做拆箱(unboxing)。

讯享网Integer chenmo = new Integer(10); // 手动装箱 int wanger = chenmo.intValue(); // 手动拆箱 Integer chenmo = 10; // 自动装箱 int wanger = chenmo; // 自动拆箱 

反编译后发现,自动装箱是通过 Integer.valueOf() 完成的;自动拆箱是通过 Integer.intValue() 完成的。

public static Integer valueOf(int i) { 
    if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } private static class IntegerCache { 
    static final int low = -128; static final int high; static final Integer cache[]; static { 
    // high value may be configured by property int h = 127; int i = parseInt(integerCacheHighPropValue); i = Math.max(i, 127); h = Math.min(i, Integer.MAX_VALUE - (-low) -1); high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127; } } 

举例:

讯享网//(1)基本类型和包装类型 int a = 100; Integer b = 100; System.out.println(a == b); //(2)两个包装类型 Integer c = 100; Integer d = 100; System.out.println(c == d); //(3) c = 200; d = 200; System.out.println(c == d); 

(1)基本类型和包装类型进行 == 比较,这时候 b 会自动拆箱,直接和 a 比较值,所以结果为 true
(2)两个包装类型的值都是100,这时候会进行自动装箱,那 = = 比较后为true
(3)两个包装类型重新被赋值为了 200,这时候仍然会进行自动装箱,= =比较后为false

小讯
上一篇 2025-01-28 23:20
下一篇 2025-02-22 20:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/24493.html