基本类型和运算
1.1 java中的基本数据类型
int长度数据类型:byte(8bit)、short(16bit)、int(32bit)、long(64bit)
float长度数据类型:单精度(32bit float)、双精度(64bit double);
boolean类型变量取值:true/false
char数据类型:unicode字符(16bit)
Java还对基本数据类型进行了封装(字符型Character,布尔类型Boolean,数值类型Byte,Short,Integer,Long,Float,Double)
java中默认小数是double类型的,直接写的整型数字是int类型
引申:
- java中的null值不是一个合法的object实例,编译器没有为其分配内存,null只是将引用变量的值全部置0;
- Java语言中变量分为原始值和引用值,声明为基本类型的变量存储的都是实际值;声明为引用类型的变量,存储的是实际对象的地址。String x = null,定义了一个变量“x” 存放的是String引用,为null;
1.2 什么是不可变类
不可变类是指当创建这个类的实例之后,就不允许修改它的值。Java类库中所有基本数据类型的包装类是不可变类,String类也是不可变类;
1.3 值传递和引用传递的区别
-
值传递
在方法调用中,实参会把它的值传给形参,形参只是用实参的值初始化一个临时的存储单元,因此形参和实参的值相同,但是存储单元不同,改变形参的值不会影响实参的值; -
引用传递
方法调用中,传递的是对象的地址,形参和实参的对象指向的是同一存储单元,形参的改变会影响实参的值。
Java中基本数据类型在传递参数时都是按值传递,包装类型在传递时是按引用传递;
1.4 不同数据类型的转换有哪些规则
转换规则:
从低精度向高精度转换,优先级满足byte<short<char<int<long<float<double;
类型转换
-
类型自动转换
低级数据可以自动转换为高级数据类型
char类型数据转换为高级类型(int、long),会转换为对应的ASCII码;
byte、char、short类型的数据在参与运算时会自动转换为int;
基本数据类型和boolean类型之间不能相互转换; -
强制类型转换
1.5 强制类型转换的注意事项
例如对于语句short s1 = 1;s1 = s1+1;由于s1+1在运算时将结果变为int类型,s1是short类型,所以编译器会报错;short s1 =1;s1+=1中"+="是Java语言中规定的语法,会直接将s1转换为int类型;
1.6 运算符的优先级
如何不确定运算符的优先级,最好使用括号运算符来控制运算顺序;
1.7 Math类中的round、ceil和floor方法的功能
- round表示四舍五入,在原数的基础上先增加0.5在向下取整;
- ceil的功能是向上取整,Math.ceil(a),取大于a的最小整数值,返回值类型是double
- floor是向下取整,Math.floor(a),取小于a的最大整数值,返回值类型是double;
1.8 ++i和i++有什么区别
i++是在程序执行完毕后进行自增;
++i是在程序开始执行前进行自增;
1.9 如何实现无符号数的右移
">>"执行右移操作时,参与运算的数字为正数,则在高位补0;若为负数则在高位补1;
">>>"无论正数还是负数都在高位补0;
"<<"左移运算符,左移n位表示原来的值*2的n次方;
1.10 char型变量是否可以存储一个汉字
Java语言中默认采用Unicode编码方式,每个字符占用两个字节,可以用来存储中文。中文占用两个字符,英文占用一个字符,采用这种存储方式的一个重要作用就是减少所需要的存储空间,提高存储效率。