面试
一下内容可能是面试可能会问到的。
JAVA变量类型的范围
整数类型:
byte 一个字节
到
short 两个字节
到
int 四个字节
到
long 八个字节
到
浮点类型:
float 四个字节
到
单精度
double 八个字节
到
双精度
字符型:
char 占两个字节
boolean 理论上是占八分之一个字节,因为一个开关就可以决定True or False了,但是Java中boolean类型没有明确的规定大小。
变量转化
package test;
public class test {
public static void main(String[] args) {
byte b1 = 3;
byte b2 = 3;
byte b3 = b1 + b2;
System.out.println(b3);
}
}
该代码编译是会报错的。因为java语言byte与byte(short,char)进行运算的时候会提升为int,两个int类型相加的结果也是int类型。把int类型赋值给byte类型会出现精度损失。
package test;
public class test {
public static void main(String[] args) {
byte b1 = 3+7;
System.out.println(b1);
}
}
那为什么这段代码不会报错呢?3是int类型的,7也是int类型的。int+int同样应该是int。赋值给byte类型应该会有精度损失,那为什么这个没有报错呢?因为java编译器有常量优化机制。在编译的时候已经把3+7算好了,3+7在-128到127的范围类就行了。
混合运算类型转化
byte,short,char ===> int ===> long ===> float ===> double
注意虽然float是四个字节,long是八个字节。但是由于存储方式不同。所以float其实比long要大。
任何数据类型用+与字符串相连接都会产生新的字符串
例如:
package test;
public class test {
public static void main(String[] args) {
System.out.println("hello" + 1 +'a');
}
}
输出结果:hello1a
那么接下来猜猜这个会输出什么?
package test;
public class test {
public static void main(String[] args) {
System.out.println('a' + 1 + "hello");
}
}
结果:98hello。因为运算从左往右。'a’先变成int类型与1相加再与字符串相加。
char类型
char类型可以存储一个中文汉字吗?,java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字符,中文也是占用两个字节。所以Java中的字符可以存储一个中文汉字。
运算符
package test;
public class test {
public static void main(String[] args) {
short s = 1;s = s+1;
System.out.println(s);
}
}
该段代码会报错,理由一样short 类型进行运算时会提升为Int类型,而int类型转化成short类型会出现精度损失。
package test;
public class test {
public static void main(String[] args) {
short s = 1;s += 1;
System.out.println(s);
}
}
而这段代码就不会报错。因为他相当于
package test;
public class test {
public static void main(String[] args) {
short s = 1;s =(short) (s + 1);
System.out.println(s);
}
}