注:资料有书为证,大伙可放心翻阅并熟记,由本人亲自总结!
1、java提供了哪些基本数据类型?
八种原始的数据类型:byte、short、int、long、float、double、char、boolean。这些基本类型的数据变量在声明之后就会立刻在栈上被分配内存空间。除此之外,还有引用类型,引用类型在声明时候不会被分配内存空间,只是存储了一个内存地址而已。
另外,Java还提供了这些原始数据类型的分装类(字符类型Character,布尔类型Boolean,数值类型Byte、Short、Integer、Long、Float、Double)
注意:原始数据类型在传递参数的时候都是按值传递,而封装类型则是按引用传递的。
null不是一个合法的Object实例,编译器并没有为它分配内存,它仅仅用来表明该引用目前没有指向任何对象。与C语言相似,null是将引用变量的值全部置为0。
当声明为原始类型的变量,其存储的时实际的值。声明为引用类型的变量,存储的是实际对象的地址。对于String x=null。它定义了一个变量x,x中存储的是String引用,此处为null
拓展:float f=1.0f或float f=(float)1.0…
2、什么是不可变类?
不可变类是指当创建了这个类的实例后,就不允许修改它的值了,也就是说,一个对象一旦被创建出来,在其整个生命周期中,它的成员变量就不能被修改了。
在Java类库中,所有基本类型的包装类都是不可变类,此外,String也是不可变类。
既然String是不可变类,那为什么还可以用代码改变其值呢?原理其实是因为,它并不是真正的改变了对象,而只是将其指向了一个新的对象,至于原先那个对象其实还存在内存当中,并没有改变。
创建不可变类的四条基本原则:
①、类中所有成员变量被private所修饰。
②、类中没有写或者修改成员变量的方法。
③、类中所有方法不能被子类覆盖,可以通过final关键字来实现。
④、如果一个类成员不是不可变量,那么在成员初始化或者使用get方法获取该成员变量时,就需要通过clone方法来确保类的不可变性。(复制一个新的变量交给调用者,使得原始数组不会被破坏。)
⑤、如果有必要,可使用覆盖Object类的equals()方法和hashCode()方法。
拓展:Java语言中之所以设计有很多不可变类,其实是因为不可变量居于使用简单、线程安全、节省内存等优点。但它也有它的弊端,不可变类的对象会因为值得不同而产生新的对象,从而导致无法预料得问题。
3、值传递与引用传递有哪些区别?
值传递:虽然形参和实参有着相同得值,但是却有着不同得存储单元,那是因为形参只是借用了实参的值初始化了一个临时的存储单元,所以形参的改变不会影响实参的值。(注意:这里和赋值有点区别,要注意区分。)
引用传递:在方法调用中,传递的是对象,这时形参和实参的对象指向同一块存储单元,因此对形参的修改就会影响实参的值。(注意:这里和按引用赋值有点区别,注意区分。)
4、不同数据类型的转换有哪些规则?
从低精度向高精度转换,即优先级满足byte<short<char<int<long<float<double。
在Java语言中,类型转船可以分为类型自动转换和强制类型转换 。
类型自动转换规则如下:
操作数的类型 | 转换后的类型 |
---|---|
byte short char | int |
byte short char int | long |
byte short char int long | float |
byte short char int long float | double |
强制类型转换规则如下:
原操作数的类型 | 转换后操作数的类型 |
---|---|
byte | char |
short | byte char |
char | byte char |
int | byte short char |
long | byte short char int |
float | byte short char int long |
double | byte short char int long double |
5、强制类型转换的注意事项有哪些?
在设计到byte、short和char类型的运算时,首先会把这些类型的变量值强制转换成int类型,然后对int类型的值进行计算,最后得到的值也是int类型。
语句short s1=1;s1 += 1能够编译通过,那是因为“+=”为Java语言规定的运算发。
6、运算符优先级是什么?
7、Math类中round、celi和floor方法的功能各是什么?
Math类里边的方法全是静态方法!
①、round方法表示四舍五入。其原理是先增加0.5然后再向下取整。
②、celi方法的功能是向上取整。若为正数,则把小数“入”,若为负数,则把小数“舍”。
③、floor方法的功能是向下取整,若为正数,则把小数“舍”,若为负数,则把小数“入”
8、++i和i++有什么区别?
(理解)它们的不同点在于i++是在程序执行完毕后进行自增,而++I实在程序开始执行前进行自增。
9、如何实现无符号的右移操作?
“>>”被称为有符号的右移操作,“>>>”被称为无符号右移操作。它们的功能都是将参与运算的对象对应的二进制右移指定的位数。
二者的不同在于">>“在执行右移操作时,若参与运算的数字为正数,则在高位补0;若为负数,则在高位补1。而”>>>"则不同,无论参与运算的数字为正数或为负数,在执行运算时,都会在高位补充0。
此外,需要注意的时,在对char、byte、short等类型的数进行移位操作前,编译器都会自动地将数值转换为int类型,然后才进行移位操作。
拓展:与右移运算不同的时,左移运算没有有符号和无符号左移,在左移时,移除高位的同时在低位补0。与右移相同的时,当进行左移时,如果移动的位数超过了该类型的最大值数,那么编译器会对移动的位数取余,即对int类型移动33为,实际上只移动了33%32=1位。
10、char型变量中是否可以存储一个中文汉字?
Java中,char默认使用的Unicode编码方式,即每个字符占用两个字节,因此可以用来存储中文。
英文占用一个字符,中文占用两个字符。
转载麻烦请附录地址,感谢大家配合!!!
https://blog.csdn.net/HOLLOWYANG/article/details/119985525