发表时间:2022-03-26来源:网络
Java学习:https://www.runoob.com/java/java-tutorial.html
Java面:https://zhuanlan.zhihu.com/p/64147696
数据结构学习: http://data.biancheng.net/intro/
自动拆箱和自动装箱定义:
自动装箱是将一个java定义的基本数据类型赋值给相应封装类的变量。
拆箱与装箱是相反的操作,自动拆箱则是将一个封装类的变量赋值给相应基本数据类型的变量。
== 和 equals 的区别是什么?
(1)功能不同
"=="是判断两个变量或实例是不是指向同一个内存空间。
"equals"是判断两个变量或实例所指向的内存空间的值是不是相同。
(2)定义不同
"equals"在JAVA中是一个方法。
" == "在JAVA中只是一个运算符号。
凡是比较基本类型只能用“ == ”, 比较结果你看到的字面值相等就会相等。基本类型不是对象所以不存在用equals比较。
凡是比较引用类型(对象),==比较的是两个引用是不是指向同一个内存地址, equals比较的是两个引用的字面值是不是相同。
基本类型的包装类型是对象类型,所以除非两个相同字面值的引用指向同一内存地址,值才会相等,这样用等号或equals比较都会得出true。
凡是两个引用都用了new初始化,那==比较的结果都只会是false, equals比较结果为true。
hashCode() 方法用于返回字符串的哈希码,也称为散列码,它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。
通过调用hashCode()方法获取对象的hash值。
关于hashCode和equal是方法是有一些常规协定 :
(1)两个对象用equals()比较返回true,那么两个对象的hashCode()方法必须返回相同的结果。
(2)两个对象用equals()比较返回false,不要求hashCode()方法也一定返回不同的值,但是最好返回不同值,提高哈希表性能。
(3)重写equals()方法,必须重写hashCode()方法,以保证equals方法为true时两个对象hashcode返回相同的值。
两个对象的hashCode相等,equals不一定返回true, 两个类不一定相等。 因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。
equals返回true, 说明是同一个对象, 那么hashCode一定相同;
equals返回false, 那么hashCode有可能相等,也有可能不等。
JAVA基本数据类型
在生活中,使用的数据有大有小,有整数,也有小数,同时也会使用字母,或者汉字表示特定含义。在Java中根据数据的不同特点,数据也分为不同的类型。 Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配 了不同大小的内存空间。
基本类型:占用空间固定,保存在栈中;
引用类型:占用空间不固定,保存在堆中。

1.数据类型详细介绍
(1)整数类型(byte、short、int、long)
虽然byte、short、int、long 数据类型都是表示整数的,但是它们的取值范围不一样。
①byte 的取值范围(8位):-128~127(-2的7次方到2的7次方-1)
②short 的取值范围(16位):-32768~32767(-2的15次方到2的15次方-1)
③int 的取值范围(32位,4字节):-2147483648~2147483647(-2的31次方到2的31次方-1)
④long 的取值范围(64位,8字节):-9223372036854774808~9223372036854774807(-2的63次方到2的63次方-1)
Java各整数类型有固定的取值范围和字段长度,其不受具体操作系统的影响,以保证Java程序的可移植性。
综上可以看出 byte、short 的取值范围比较小,而long的取值范围是最大的,所以占用的空间也是最多的。int 取值范围基本上可以满足我们的日常计算需求了,所以 int 也是我们使用最多的一个整型类型,Java语言整型常量默认为int型,声明long型常量后面需加" L "或 " l "。
(2)浮点型(float、double)
float 和 double 都是表示浮点型的数据类型,它们之间的区别在于精确度的不同。Java语言浮点类型常量默认为double型。
①float(单精度浮点型)(32位)的取值范围: -3.4E+1038 ~ 3.4E+1038(E+1038 表示乘以10的1038次方)
②double(双精度浮点型)(64位)的取值范围:-1.79E+10308 ~ 1.79E+10308(E+308 表示乘以10的10308次方)
double 类型比float 类型存储范围更大,精度更高。通常的浮点型数据在不声明的情况下都是默认double型的,在数值后可加"D"或"d",作为double类型的标识;如果要表示一个数据是float 型的,则需在数据后面加上 " F "或 " f " 。浮点型的数据是不能完全精确的,有时候在计算时可能出现小数点最后几位出现浮动,这是正常的。
(3)字符型(char) 在内存中占用2个字节
char型数据用来表示通常意义上得“字符”,char的取值范围:0~ 65535
char 有以下的初始化方式:
①字符常量为用单引号括起来的单个字符,例如char ch =’ a '; char ch = ’ 中 ‘; // 可以是汉字,因为是Unicode编码。
②char ch = 1010; // 可以是十进制数、八进制数、十六进制数等等。
③char ch = ’ \0 ‘; // 可以用字符编码来初始化,如:’\0’ 表示结束符,它的ASCll码是0,这句话的意思和 ch = 0 是一个意思。
Java是用Unicode 来表示字符,“中” 这个中文字符的Unicode 就是两个字节。通常gbk / gb2312 是两个字节,utf-8 是3个字节。
例如,想在程序中输出一个包括双引号的字符串时,可把字符变量赋值为转义字符,再将它输出,也就是说,在程序中声明一个字符类型变量ch,然后把ch设置为“"”,再进行输出的操作,或者,也可以直接在要输出的字符串中加入特殊的转义字符。如表所示为常用的转义字符。
(4)布尔型(boolean)
boolean类型通常用于逻辑运算和程序流程控制。
boolean的取值就两个:true 、false 。不可以0或非0的整数替代true和false,这点和C语言不同。
例如,声明名称为flag 变量的布尔类型,并设置为true 值,可以使用下面的语句:
基本数据类型的默认值:
2.基本类型之间的转换
将一种类型的值赋值给另一种类型是很常见的。在Java中,boolean 类型与其他7种类型的数据都不能进行转换。 但对于其他7种数据类型,它们之间都可以进行转换,只是可能会存在精度损失或其他一些变化。
转换分为自动转换和强制转换:
(1)自动转换(隐式转换):
①转换前的数据类型与转换后的类型兼容。
②转换后的数据类型的表示范围比转换前的类型大。
例如,将short类型的变量a转换为int 类型,由于short与int 皆为整数类型,符合上述条件①;而int的表示范围比short大,符合条件②。因此Java会自动将原为short类型的变量a转换为int类型。
int类型与float类型进行计算之后,输出的结果会变成float类型,一个整型常量和一个浮点型常量进行计算之后,结果也会变为一个浮点数据;
而如果是两个int类型的常量进行计算,最终结果还是int类型,而其小数部分将会被忽略;
也就是说,假设有一个整数和双精度浮点数作运算时,Java 会把整数转换成双精度浮点数后再作运算,运算结果也会变成双精度浮点数。
自动转换时发生扩宽(widening conversion)。因为较大的类型(如int)要保存较小的类型(如byte),内存总是足够的,不需要强制转换。如果将字面值保存到byte、short、char、long的时候,也会自动进行类型转换。注意区别,此时从int(没有带L的整型字面值为int)到byte/short/char也是自动完成的,虽然它们都比int小。在自动类型转化中,除了以下几种情况可能会导致精度损失以外,其他的转换都不能出现精度损失:
int–> float
long–> float
long–> double
float -->double without strictfp
(strictfp, 即 strict float point (精确浮点))
除了可能的精度损失外,自动转换不会出现任何运行时(run-time)异常。
提示:任何类型的数据都向String转型。
一些读者从其他的Java教材之中经常会发现,有一种表示字符串的数据类型String,从其定义上可以发现单词首字母大写了,所以此为一个类,属于引用数据类型,但是此类属于系统的类,而且使用上有一些注意事项,在此处读者所需要知道的只有以下两点:
①String可以像普通变量那样直接通过赋值的方式进行声明。字符串是使用“ " ”括起来的。两个字符串之间可以使用“+” 进行连接。
②任何数据类型碰到String类型的变量或常量之后都向String类型转换。

②强制转换(显式转换):需使用转换操作符(type)。
7种数据类型顺序排列:double > float > long > int > short > byte;
如果从小转换到大,那么可以直接转换,而从大到小,或char 和其他6种数据类型转换,则必须使用强制转换。
如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换,也被称作缩小转换(narrowing conversion),要加上强制转换符,但可能造成精度的 降低或溢出,使用时要格外注意,因为必须显式地使数值更小以适应目标类型。
当两个整数进行运算时,其运算的结果也会是整数。例如,当做整数除法8/3的运算时,其结果为整数2,并不是实际的2.3333…,因此,在Java中若是想要得到计算的结果是浮点数时,就必须将数据类型做强制性的转换,转换的语法格式如下:
(要转换的数据类型) 变量名称;
因为这种强制类型的转换是直接编写在程序代码中的,所以也称为显式转换。以下程序说明了在Java中整数与浮点数是如何转换的。

数据的溢出
当整数的数据大小超出了可以表示的范围,而程序中又没有做数值范围的检查时,这个整型变量所输出的值将发生紊乱,且不是预期的运行结果。在下面的程序范例中声明了一个整型的数,并把它赋值为整型所可以表示范围的最大值,然后将它分别加1及加2。

上一篇:详述Java基本数据类型
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务