~~
小白头一次写博客,文化水平也不高,可能很多地方表达不清楚,或者让各位看官看不懂,希望各位看官可以提提意见,互相学习,后续我会再更改文案,争取让各位看的更清楚明白写。 逛了这么久的CSDN,突然也想和大家分享一下学到的知识,希望可以对各位看官有所帮助。 由于第一次使用,还不知道代码块怎么显示输出结果,所以有的输出结果我手打出来的,有的是直接写到后面注释上,请各位看官见谅!
整形的话分为四种,按照所占内存大小来排序的话分别是:byte、short、int、long。而在Java中任何的一个整形常量的默认类型都是int类型,也就是说只要是整数那么这个整数的数据类型就是int类型。
~~
public class JavaDemo{
public static void main(String args[]){
int x = 10; //定义一个整形变量x
//int型变量 * int型变量 = int型数据
System.out.println(x*x);
}
}
如上代码,int类型*int类型=int型数据。
不过根据上面的代码来看,int x = 10; 其中10是一个常量,是永远不会变的,但是x是一个变量,x的内容是可以发生改变的
如下:
public class JavaDemo{
public static void main(String args[]){
int x = 10;
x = 20; //改变了X的已有内容
System.out.println(x);
}
}
整段代码输出结果为:20;
由此可知在Java中变量的内容是可以轻易改变的,而常量的内容是恒古不变的。
再有就是众所周知,任何的数据类型都是有其可以保存的数据范围的,也就是数据类型所占的空间大小。(在正常使用下我们很少会出现超过此范围的数据 比如我们平时用到的int 的大小已经非常充足了)那么真的超过了我们该怎么做呢?
范例:int超出使用范围
public class JavaDemo{
public static void main(String args[]){
int max = Integer.MAX_VALUE; //获取int的最大值
int min = Integer.MIN_VALUE; //获取int的最小值
System.out.println(max); // 结果为2147483647
System.out.println(min); // -2147483648
System.out.println(-------分割线--------);
//假如我们用int的最大值在加上1会产生什么样的输出结果呢?
System.out.println(max+1); //输出结果为:-2147483648,最大值 + 1 = 最小值
System.out.println(max+2); //输出结果为:-2147483647,最大值 + 2 = 次最小值
//我们再次假设:加入int的最小值减去1会等于多少
System.out.println(min-1); //输出结果为:2147483647,最小值 - 1 = 最大值
}
}
通过此时的执行结果可以发现这些数字在进行处理的时候如果超过了其最大的保存范围,那么将出现有循环的问题 ,而这样的问题在Java中我们称之为数据溢出,如果想要解决这种溢出,那么可以使用类型转换从而继续扩大使用范围,而比int更大的整数数据类型是long;
数据溢出的情况就像往水杯倒水,我们把int比喻成一个小型水杯,吧long比喻成一个大水杯。当我们把小水杯里的水往大水杯里倒的时候,大水杯可以完全储存下这些水,而我们把一个装满水的大水杯里的水往一个小杯子里面倒的时候会发现当小杯子里面的水满了之后剩下的水都会洒出来。这就是Java 中的内存溢出
解决数据溢出:
1、在操作的时候提前预估数据范围,如果发现范围不够就使用更大范围:
public class JavaDemo{
public static void main(String args[]){
long max = Integer.MAX_VALUE;
long min = Integer.MIN_VALUE;
System.out.println(max);
System.out.println(min);
System.out.println(-------分割线--------);
//long型变量+int型常量=long型计算结果
System.out.println(max+1);
//long型变量-int型常量=long型计算结果
System.out.println(min-1);
删除线格式
这事我们的输出结果应该是
2147483647
-2147483648
-------分割线--------
2147483648
-2147483649
(ps:第一次写博客 不知道怎么在这里面输出,大家见谅)
这个时候最大值已经变化了。超出了int 的处理范围
2、除了可以定义long类型以外,也可以直接在常量上进行处理,默认的整数常量都是int型,那么可以为他追加字母“L”或直接使用“(long)”转换
public class Demo{
public static void main(String args[]){
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
System.out.println(max);
System.out.println(min);
System.out.println(max+1L);
System.out.println(max+2l);//大小写L都可以,但是推荐大家用大写的,要不然容易被看成21;
System.out.println((long)min-1);
}
}
删除线格式
需要大家注意的是转换类型的时候是要从小往大转,即范围小的类型转换为范围大的类型(把int类型转为long类型)。
如果我们从采用强制的处理模式,将大往小转(long类型转为int类型)会造成精度损失。
如果不是在必须的情况下不建议用强制转换