Java常见面试题汇总-----------Java基础(基本类型和包装类型、equals和hashCode、++和--、值传递和引用传递)

这篇博客详细介绍了Java中的基本数据类型及其数值范围,解释了为什么需要包装类型,以及装箱和拆箱的概念。同时,讨论了equals与"=="的区别,以及hashCode()的用途和它与equals的关系。此外,还探讨了自增(++)和自减(--)的操作区别,以及值传递和引用传递的原理。
摘要由CSDN通过智能技术生成

19. Java基本数据类型、有了基本数据类型,为什么还需要包装类型?

19.1、Java基本数据类型,数值范围

  Java共有4类8种基础数据类型:byte、short、int、long、float、double、char、boolean。
  1、四种整数类型(byte、short、int、long):byte:8位,用于表示最小数据单位,如文件中数据,-128~127。 short:16位,很少用,-32768 ~ 32767。int:32位,最常用,-231-1~231(21亿)。long:64位,次常用。注意事项:int i=5; //5叫直接量(或字面量),即直接写出的常数。整数字面量默认都为int类型,所以在定义的long型数据后面加L或l。小于32 位数的变量,都按int结果计算。强转符比数学运算符优先级高。

  2、两种浮点数类型(float、double):float:32位,后缀F或f,1位符号位,8位指数,23位有效尾数。double:64位,最常用,后缀D或d,1位符号位,11位指数,52位有效尾数。注意事项:浮点数字面量默认都为double类型,所以在定义的float型数据后面加F或f;double类型可不写后缀,但在小数计算中一定要写D或X.X。float的精度没有long高,有效位数(尾数)短。float的范围大于long,指数可以很大。浮点数是不精确的,不能对浮点数进行精确比较。

  3、一种字符类型(char):char:16位,是整数类型,用单引号括起来的1个字符(可以是一个中文字符),使用Unicode码代表字符,0~2^16-1(65535)。注意事项:不能为0个字符。转义字符:\n 换行、\r回车、\t Tab字符、\" 双引号、\\表示一个\,两字符char中间用“+”连接,内部先把字符转成int类型,再进行加法运算,char本质就是个数!二进制的,显示的时候,经过“处理”显示为字符。

  4、一种布尔类型(boolean):true真和false假。
  5、类型转换:char–>自动转换:byte–>short–>int–>long–>float–>double。强制转换:①会损失精度,产生误差,小数点以后的数字全部舍弃。②容易超过取值范围。

19.2、为什么需要包装类型

  我们都知道在Java语言中,new一个对象存储在堆里,我们通过栈中的引用来使用这些对象;但是对于经常用到的一系列类型如int,如果我们用new将其存储在堆里就不是很有效——特别是简单的小的变量。所以就出现了基本类型,更加高效。
  而为什么还需要包装类型呢?Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(每一种基本的数据类型都有一种对应的包装类型,如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法(最大值、最小值、null),丰富了基本类型的操作。
  另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装器类了。

19.3、装箱与拆箱

  装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。
  Integer i = 1;自动装箱,实际上在编译时会调用Integer.valueOf()方法来装箱,在Java5之前,只能通过new的方式创建一个Integer对象,Java5之后实现自动装箱。
  Integer i = 1;
  int j = i; //自动拆箱,实际上也会在编译器调用Integer.intValue();
  其他的也类似,比如Double、Character等。
  因此可以用一句话总结装箱和拆箱的实现过程:装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。

19.4、Integer的缓存值

首先看下Integer的valueOf()方法:

public static Integer valueOf(int i) {
   
    if(i >= -128 && i <= IntegerCache.high)
        return IntegerCache.cache[i + 128];
    else
        return new Integer(i);
}

  在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。这样做主要的目的就是为了提高效率(因为一些小值数据经常使用)。
  注意,Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。Double、Float的valueOf方法的实现是类似的。这主要是因为在某个范围内的整型数值的个数是有限的,而浮点数却不是。

20. hashCode和equals比较、equals与“==”比较

20.1、equals与“==”

  1、基本数据类型,也称原始数据类型。
  Byte,short,char,int,long,float,double,boolean,他们之间的比较,应用双等号(==),比较的是他们的值。

int a = 10;
long b = 10l;
dou
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值