目录
JAVA数据类型
一、java的数据类型有哪些?
基本数据类型有四类八种:
整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)
浮点型:float(4字节)、double(8字节)
字符型:char(2字节)
布尔型:boolean(1位)
引用类型:类class、接口interface、数组[]
二、float和long哪个存放的数据更大,为什么?
Float存放的更大,因为虽然float占用4个字节,long占用8个字节,但是float存储结构不同, 是把32位分成了两部分,一部分存放阶码(左移位数的2进制表示,等价于10进制指数),一部分存放尾数(移动后小数点后面的数字,等价于10进制底数)。
三、Integer和int的区别
- Integer是int的包装类,int则是java的一种基本数据类型
- Integer变量必须实例化后才能使用,而int变量不需要
- Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值;
- Integer的默认值是null,int的默认值是0;
四、可不可以使用char来存汉字?
可以,因为char是2个字节,汉字也是2个字节
五、i一定小于i+1吗?
不一定,如byte i = 127,加完之后结果为-1
六、Java类型转换
- 自动转换(小转大/子类转父类):byte,short,char——>int——>long——>float——>double; byte,short,char相互之间不转换,他们参与运算首先转换为int类型 ;boolean类型不参与转换。
- 强制转换:目标类型 变量名=(目标类型)(被转换的数据),可能会丢失精度;
七、Double a=0.09+0.01的结果是多少?怎么处理?
结果不是0.1,会丢失精度,用BigDecemal,同样大整形的时候可以使用BigInteger。
浮点数转二进制,是把小数点后面的值一直*2,一直到小数点后面为0结束,如果到了小数的底数表示的位数的时候还没有结束,就会直接丢失。
八、short s= 1; s=s+1有问题没有?s+=1;有没有问题?
第一个有问题,第二个没问题,因为+=做了特殊处理,相当于+完之后强转了
九、请输出下面的结果(包装类和基本类型)
int a = 128;
int b = 128;
System.out.println(a == b); //①
Integer a1 = 128;
Integer b1 = 128;
System.out.println(a1 == b1); //②
Integer a2 = 127;
Integer b2 = 127;
System.out.println(a2 == b2); //③
解析:对于①,由于a和b都是基本数据类型,==对比的时候采用的是值对比,所以相同,打印true
对于②和③,由于是对包装类型进行对于,所以比较的是引用,然后,对于整数,127到-128之间的数据存在了常量缓冲区,所以a2和b2并没有重新创建对象,而是指定了同一个地址,所以③为true,而a1和b1超出了范围,会创建出新的对象,所以不同,②打印false
JAVA引用类型
JAVA里面引用有四种类型:强引用、软引用、弱引用、虚引用
- 强引用:可以用来直接访问对象,指向的对象永远都不会被JVM回收,哪怕抛出OOM异常;可能导致内存泄漏
- 软引用:强引用之前最强的引用。当堆使用率接近阈值的时候,会被回收。引用的对象被回收之前,通过SoftReference类的get方法可以返回对象,回收之后会返回null。可以用于实现对内存敏感的缓存系统。
- 弱引用:是一种比软引用较弱的引用类型。在系统GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收。所以也可以用来做缓存,当内存充足的时候,可以用来提速,内存不足的时候,会自动回收。
- 虚引用:所有类型中最弱的一个。一个持有虚引用的对象,和没有引用几乎是一样的,随时可能被垃圾回收器回收。当试图通过虚引用的get()方法取得强引用时,总是会失败。并且,虚引用必须和引用队列一起使用,它的作用在于跟踪垃圾回收过程。
- 参看文档https://www.cnblogs.com/yueshutong/p/9531347.html
运算符
一、最快的速度把一个数a*8
a << 3
二、&和&&的区别
- 都可以做逻辑运算符,&还可以作为位运算符
- &&是短路运算符,如果左边的表达式是false,右边不执行
测试方式:if(b() && a()){ } boolean a{ 打印一句话 return true; } boolean b { 打印一句话 return false; }
三、怎么交换a和b的值
- 方式一
int tmp = a ; a = b; b =tmp;
- 方式二
a = a+b; b = a-b; a = a-b;
- 方式三
a=a^b; b=a^b; a=a^b;
- 方式四
a = (a+b) - (b=a)
四、==和equals的区别
- == 的作用
基本类型:比较的就是值是否相同
引用类型:比较的就是地址值是否相同 - equals 的作用
仅仅用于引用类型的比较。引用类型:默认情况下,比较的是地址值。
注:不过,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同
五、JAVA集合体系
- 集合用来解决数组长度不可变的问题;
- Java中集合主要分为两种:单列的Collection和双列基于key-value的Map;
- Collection有两个子接口:List和Set。其中List是有序可重复的集合;Set是无序不可重复的接口;
- List常用的实现有ArrayList、LinkedList、Vector;
- Set常用实现有HashSet、TreeSet;
- Map主要实现有HashMap和HashTable和CurrentHashMap;
未完待续中…
转载:https://blog.csdn.net/mail_liuxing/article/details/102055764