JAVA随堂笔记第三弹-数据类型

数据类型


数据类型:

Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间.

数据类型分类:

基本数据类型,引用数据类型

基本数据类型

数值型[整数类型(byte,short,int,long),浮点类型(float,double)],字符型(char),布尔型(boolean).

引用数据类型:

类(class),接口(interface),数组([]).

整数类型: byte(字节),short(短整型),int(整型),long(长整型).

占用字节数           1                          2                   4                          8

表数范围         -128~127,-2^15~2^15-1,-2^31~2^31-1,-2^63~2^63-1

                            Float           double               char             boolean

占用字节数           4                   8                   2                          1

表数范围         -3.403E38~3.403E38,-1.798E308~1.798E308

整数默认: int 小数默认: double

注意:长整型后缀用Ll标记.建议用L.

例子://超过int j = 1000000000000;

         //错误格式       long j = 1000000000000;

              long j = 1000000000000L;

              System.out.println(j);

注意: 单精度浮点数用F或者f标记.建议使用F.(因为浮点数默认double)

例子: //错误格式   float f = 12.345;

                                          float f = 12.345F;

                                          System.out.println(f);

 

使用变量注意事项:

作用域 : 变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域.相同的作用域中不能定义两个同名变量.

初始化值 : 没有初始化值的变量不能直接使用.(也可以只要在使用前给值就可以,不一定非要在定义时候立刻给值).

初始化例子:   int z;

                            Z = 100;

                            System.out.println(z);//这样定义也是可行的.

定义变量的格式:

                     A: 数据类型变量名 = 变量值(初始化值);

                     B: 数据类型变量名;

                            变量名 =变量值(初始化值);

建议: 一行只定义一个变量(也可以定义多个,但是不建议).

多个变量定义格式:  int d,e;

                                          d = 40;

                                          e = 50;//正确但不建议

                                          //int f,int g;  //错误

                                          int h;int I; //正确但不建议


 数据类型转换 (默认转换)

: 一般来说,我们在运算的时候,要求参与运算的数据类型必须一致.

class DataTypeDemo3{
	public static void main(String[] args){
	//直接输出的方式叫做加法
	//System.out.println(3 + 4);

	//两个int类型做加法
	int x = 3;
	int y = 4;
	int z = x + y;
	System.out.println(z);

	//定义一个byte类型,一个int类型,做加法
	byte a = 3;
	int b = 4;
	System.out.println(a + b);
	//可能损失精度
	//byte c = a + b;
	int c = a + b;
	System.out.println(c);
}
}

默认转换(从小到大转换)

              Abyteshortchar -int-long-float-double(转化顺序)

              B:byte,short,char相互之间不转换,他们参与运算首先转换为int类型。

案例 :


数据类型转换(强制转换)

强制转换:从大的数据类型到小的数据类型.

格式:目标数据类型 变量 =(目标数据类型) (被转换的数据);

注意:不要随意去使用强制转换,因为它隐含了精度损失问题.

例:

class Demo{
			public static void main(String[] args){
				byte a = 3;
				int b = 4;
				//这个肯定没有问题//int b = a+b;
				//byte c = 7;
				//byte c = a+b;//这个是有问题的

				//用强制类型转换改进
				byte c = (byte) (a+b);
				System.out.println(c);//但是不建议在实战中经常使用强制类型转换,容易损失精度。
}
}

思考题: 请问下面这个有没有(怎么转换).

              double d = 12.345;

              float f = d;

class Demo{
		public static void main(String[] args){
	double d = 12.345;
	float f = (float)d;//把double赋值给了float,加了强制类型转换。
	
	//看看下面的两个定义有没有区别?
	float f1 = (float)12.345;
	float f2 = 12.345f;
	//区别:f1其实是通过一个double类型转换过来的;而f2本身就是一个float类型。
}
}

面试题:     byte b1 = 3,b2 = 4,b;

                     b = b1 + b2;

                     b = 3 + 4;

                     那句是编译失败的呢?为什么呢?

class Demo{
		public static void main(String[] args){
			byte b1 = 3,b2 = 4,b;
			b = b1 + b2;//b1和b2是byte类型相加,首先会进行类型提升转换为int类型,因为b是byte类型,b1和b2相加是int类型,所以冲突,结果报错。
			b = 3 + 4;//常量,先把结果计算出来,然后看是否在byte的范围内,如果在就不报错。
} 	
}

例题总结:两个变量相加,先对类型进行提升,然后运算,再将运算结果赋值。

两个常量相加,先计算常量数值,然后判断是否满足类型范围,在赋值。

强制转换数据溢出后的结果怎么计算

(1)byte b = 130; 有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?

(2)练习:byte b = 300;

class Demo{

       public static void main(String[] args){

       byte b = 130;//报错是损失精度,因为byte的范围是:-128127。而130不再范围内所以报错。

       byte b = (byte)130;//我们可以使用强制类型转换

       System.out.println(b);//结果是-126

       分析过程:我们想要知道结果是什么,就应该知道是如何进行计算的,而我们又知道计算机中数据的运算都是补码进行的。而要得到补码,首先要计算出数据的二进制。

       A:获取130这个数据的二进制。

       00000000 00000000 00000000 10000010

       B:做截取操作,截成byte类型的了。

       C:已知补码求原码。

                            符号位              数值位

补码:              1                          0000010

反码:              1                          0000001

原码:              1                          1111110

     }

}


初学的宝宝们可能不懂,因为这里涉及到转换与反补码,我只能说习惯就好。一步一步脚踏实地的慢慢来

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值