数据溢出
当定义一个变量的值超过该变量类型的范围时会导致数据溢出,编译都无法通过
public class TestJava{
public static void main(String args[]){
int n=99999999999999999999999999999999;
}
}
Integer(int最大范围)的最大值
public class TestJava{
public static void main(String args[]){
int n=Integer.MAX_VALUE;
System.out.print(n);
}
}
最大值加1是最小值,再加1就是次小值依此类推
public class TestJava{
public static void main(String args[]){
int n=Integer.MAX_VALUE;
System.out.println(n+1);
System.out.println(n+2);
}
}
用长整型强制转换可以解决最大值加1就是最小值的问题
public class TestJava{
public static void main(String args[]){
int n=Integer.MAX_VALUE;
System.out.println((long)n+2);
}
}
字符的本质也是数值(ascill码),所以字符不仅仅单双引号进行定义,只要是char类型,则也可以用数值代替
public class TestJava{
public static void main(String args[]){
char ch1='a';
char ch2=97;
System.out.println(ch1);
System.out.println(ch2);
}
}
转义字符
public class TestJava{
public static void main(String args[]){
char ch1='\"';
char ch2='\\';
System.out.println(ch1);
System.out.println(ch2);
}
}
定义浮点型数据要指定精度,否则默认精度会有默认转换的情况损失精度
这里定义浮点型3.0,那么也就是说要的是float的目的数据,而默认是double,double转换到float是会损失精度的。
public class TestJava{
public static void main(String args[]){
float num=3.0;
}
}
指定精度后就没有问题了
public class TestJava{
public static void main(String args[]){
float num=3.0f;
}
}
布尔类型
public class TestJava{
public static void main(String args[]){
boolean flag=true;
System.out.print(flag);
}
}
自动转型
这里整数除以浮点型最后的结果自动转换为浮点型了。
public class TestJava{
public static void main(String args[]){
int x=30;
float y=22.19f;
System.out.print(x/y);
}
}
public class TestJava{
public static void main(String args[]){
System.out.print(10/3.5);
}
}
整型相除问题
这里相除的结果很明显损失了精度
public class TestJava{
public static void main(String args[]){
System.out.print(10/3);
}
}
用强转float可以解决该问题
public class TestJava{
public static void main(String args[]){
System.out.print((float)10/3);
}
}
字符串与int的运算
public class TestJava{
public static void main(String args[]){
String str="gaojiupan";
int x=30;
str=str+x;
System.out.print(str);
}
}
上面这是正常情况,再看一个比较异常的情况
public class TestJava{
public static void main(String args[]){
System.out.print("1+2="+1+2);
}
}
这种情况是字符串直接进行追加了,没有把后面两个先计算再追加,像是下面这样就好了
public class TestJava{
public static void main(String args[]){
System.out.print("1+2="+(1+2));
}
}
强制类型转换丢失精度
public class TestJava{
public static void main(String args[]){
float f=30.3f;
int x=(int)f;
System.out.print(x);
}
}