Java基础:变量和数据类型

1. 变量

在程序执行的过程当中,我们需要一个存储数据的容器,这个容量就被称之为变量。这个容器在程序运行期间,容器中的值时可以随时发生改变的。

Java是一门强类型的语言,所有的变量以及数据都会存在类型,不同的类型存储的数据是不一样的,不同的类型存储的数据的大小是不一样的。

目前现阶段:我们需要确定的事情是:  所有的整数的类型暂时先使用 int

变量的三要素:数据类型 变量名 作用域

1.1 变量的声明和使用

/*
	测试使用变量
	1: 声明变量:
		data_type name ; 声明了一个data_type这样类型的变量 名字叫name
	

*/

		//1声明一个int类型的变量
		int num;


		//2: 给变量初始化
		num = 10; // 将字面值10赋值给int类型的变量num存储


		//3:使用
		System.out.println(num);


		// 声明和初始化会放在一起
		int sum = 10; // 将一个整数字面值10赋值给int类型的变量 sum存储

		System.out.println(sum);

		// 变量在程序运行期间其值可以发生改变
		sum = 20;

		System.out.println(sum);

  • 重点
    • 变量要先声明在初始化 然后才能使用  一般我们的声明和初始化时放在一起的 一行;
    • 变量在程序运行期间  其值可以发生改变
    • 变量在声明的时候必须要满足:
// data_type name = value
int num = 10; // 这个行代码是自右向左进行运算的

1.2   数据类型

 

I、byte 字节型

// 测试使用byte数据类型
public class ByteTest{
	public static void main(String[] args){

		//1:声明byte类型的变量
		byte b = 10;

		//2: 输出一下b这个变量的值
		System.out.println(b);


		// 修改byte变量b的值
        /*
        	ByteTest.java:13: 错误: 不兼容的类型: 从int转换到byte可能会有损失
                b = 130
        */
		b = 130;

		System.out.println(b);

	}
}

取值范围

数据类型

表数范围

所占空间

字节型 byte

[-128,127] -2^7 - 2^7-1

1个字节

注意事项

对于byte这种数据类型而言,大家在赋值的时候要注意取值,不要超过byte的取值范围,一般我们可以使用byte去做类型的值判定。表述状态。

II、short 短整型

// 测试使用short数据类型
public class ShortTest{
	public static void main(String[] args){

		//1:声明short类型的变量
		short b = 130;

		//2: 输出一下b这个变量的值
		System.out.println(b);


		// 修改short变量b的值
		/*
				ShortTest.java:13: 错误: 不兼容的类型: 从int转换到short可能会有损失
		                b = 130000;
		                    ^
		1 个错误
		*/
		b = 130000;

		System.out.println(b);

	}
}

取值范围

数据类型

表数范围

所占空间

短整型 short

[-32768,32767] -2^15 - 2^15-1      +-3W

2个字节  65536

注意事项

对于short这种数据类型而言,大家在赋值的时候要注意取值,不要超过short的取值范围,一般我们可以使用short存储大多数的值,但是一般不这么干;

III、int 整型

// 测试使用int数据类型
public class IntTest{
	public static void main(String[] args){

		//1:声明int类型的变量
		int b = 130000;

		//2: 输出一下b这个变量的值
		System.out.println(b);


		// 修改int变量b的值
		/*
			IntTest.java:16: 错误: 过大的整数: 2147483648
                b = 2147483648;
                    ^
			1 个错误
		*/
		b = 2147483648;

		System.out.println(b);

	}
}

取值范围

数据类型

表数范围

所占空间

整型 int

-2^31 - 2^31-1      +-21亿

4个字节

注意事项

对于int这种数据类型而言,大家在赋值的时候不需要特别注意,因为一般我们都直接使用int进行存储;Java所有字面整数值的默认类型时int类型;

IV、long 长整型

// 测试使用LongTest数据类型
public class LongTest{
	public static void main(String[] args){

		//1:声明long类型的变量
		long b = 2147483647;

		//2: 输出一下b这个变量的值
		System.out.println(b);


		// 修改long变量b的值
		/*
			LongTest.java:16: 错误: 过大的整数: 2147483648
                b = 2147483648;
                    ^
			1 个错误
		*/
		b = 2147483648L;

		System.out.println(b);

	}
}

取值范围

数据类型

表数范围

所占空间

长整型 long

-2^63 - 2^63-1

8个字节

注意事项

  • 如果给一个long类型变量赋值的时候,当前这个字面值超过了int的取值范围,此时需要在字面值后面加L或者时l。保证编译器可以识别当前字面值是long类型;
  • 在java中所有的字面整数都是int类型;
  • 对于byte和short这两种数据类型而言,只要字面值没有超过对用的数据类型的取值范围,那么编译器是不会报错的;

V、关于整数的存储方式

  • 进制转换

 

  • 数据存储

一个整数在内存中的存储,是以这个数的补码来存储的,一个数的二进制表示方式就是这个数的原码,在其第一位符号位不变的情况下,其余为取反,就得到这个数的反码,再在反码的基础上加1,就能得到一个数的补码

例如:

5 -5

原码:0000 0101   原码:1000 0101

反码:1111 1010   反码:1111 1010

补码:0000 1011   补码:1111 1011

VI、关于整数的赋值方式

// 测试整数的赋值方式
public class IntInitValue{

	public static void main(String[] args){

		//1: 二进制赋值
		int n = 0b1101; //JDK1.7之后的特性 0b 0B开头 后跟二进制数字
		System.out.println(n);



		//2:八进制赋值
		n = 027; //以0开头 后跟8进制数字
		System.out.println(n);


		//3:十进制赋值
		n = 123;
		System.out.println(n);


		//4:十六进制赋值
		n = 0x3F;//以0x 0X开头 后跟16进制数字 A:10 B:11 C:12 D:13 E:14 F:15
		System.out.println(n);

		//5:会计计数法
		long num = 123_456_789_999L;
		System.out.println(num);

	}

}

VII、float 单精度

// 测试float变量
public class FloatTest{
	public static void main(String[] args){

		//1: 声明一个float类型的变量
		/*
			FloatTest.java:6: 错误: 不兼容的类型: 从double转换到float可能会有损失
                float f = 3.14;

		*/
		float f = 3.14F; //告知编译器 我这个字面值时float类型 不是double 
		System.out.println(f);

	}
}

取值范围

数据类型

精度

所占空间

float 单精度

6-7位

4个字节

注意事项

  • 如果给一个float类型变量赋值的时候,因为所有的字面小数都是double类型,所以需要在小数字面值后面加F  \ f;
  • 在java中所有的字面小数都是double类型;

VIII、double 双精度

// 测试double变量
public class DoubleTest{
	public static void main(String[] args){

		//1: 声明一个double类型的变量
		/*
			FloatTest.java:6: 错误: 不兼容的类型: 从double转换到float可能会有损失
                float f = 3.14;

		*/
		double d = 3.14;
		System.out.println(d);


		System.out.println(1/0.3);
		System.out.println(1/0.3F);


		// 小数运算时存在精度的问题 所以一般不要使用小数运算 
		// 解决问题的办法:扩大或者时缩小倍数 
		// java BigDecimal完成精度取值
		System.out.println((0.6*10-0.5*10)/10);

	}
}

取值范围

数据类型

精度

所占空间

double 单精度

15~16位

8个字节

注意事项

  • 如果给一个float类型变量赋值的时候,因为所有的字面小数都是double类型,所以需要在小数字面值后面加F  \ f;
  • 在java中所有的字面小数都是double类型;

VIIII、小数的存储方式

  • 进制转换

  • 定点数

 

X、小数的赋值方式

// 测试小数的赋值方式
public class DoubleInitValue{

	public static void main(String[] args){

		// 正常赋值
		double d = 3.14;

		// 省略0赋值
		d = .5;
		System.out.println(d);

		// 科学计数法
		d = 0.000134;
		System.out.println(d);

		d = 1.34E-4;
		System.out.println(d);



	}

}

XI、 boolean 布尔类型

// 测试boolean类型
public class BooleanTest{

	public static void main(String[] args){

		boolean flag = true;

		System.out.println(flag);

		flag = false;
		System.out.println(flag);


	}

}

取值范围

数据类型

取值

所占空间

boolean 布尔类型

true \ false

实际占用空间1位   虚拟开空间的时候可能会当他当成byte或者是int去开空间;

注意事项

  • 有且只有两个值 分别是true 和false
  • 并且不能赋值0和1

XII、char 字符型

摘录自:ASCII图片_百度百科

Tips: 48--->0     65---->A    97---->a

// 测试使用char数据类型
public class CharTest{
	public static void main(String[] args){

		//1:声明char类型的变量 
		char ch = 'a'; // 字符都是一个个数字

		System.out.println(ch);

		// 当声明char类型的变量的时候直接赋值数字会怎么样?
		ch = 23345;

		System.out.println(ch);


		// 第三种赋值方式:通过一个个的unicode代码点去赋值
		// 斜杠\+u 后跟一个4位的16进制数字
		ch = '\u5B31';
		System.out.println(ch);

		System.out.println('c'+3);


	}
}

取值范围

数据类型

赋值方式

所占空间

char 字符型

通过单引号引起来的单个字符
通过[0,65535]之间的正整数
通过\u开头 后跟一个4位的16进制数字

2个字节

注意事项

  • char类型是可以赋值为一个数字的,所以char类型是可以参与四则运算的;

1.3 常量

常量程序运行期间不可以发生改变的。

// 测试常量
public class FinalTest{

	public static void main(String[] args) {
		

		//1: 字面常量: 写什么就是什么
		int num = 10; // 10是字面常量  
		char ch = 'A'; 
		double d = 3.14; 

		//2: 符号常量

		// 声明一个变量  半径是5
		int r = 5;

		//声明一个变量 存储pi的值
		final double pi = 3.1415;

		// 计算当前半径是5的圆的面积
		double area = pi*r*r;
		System.out.println(area);


	}
}

  • 通过final关键词修饰的变量称之为常量,常量是在程序运行期间其值不能发生改变的;
  • final修饰的常量,在一定程度上是能够提升程序的编译以及执行的效能的,因为它存储的值时不变的;

1.4 类型转换

我们在学习类型转换的时候,基本数据类型的类型转换不重要,引用类型的类型转换。

类型转化的意思:一个类型变为另外一个类型。

I、自动类型转换

// 测试基本数据类型的自动转换
public class Convert01{
	public static void main(String[] args) {
		
		//1:声明一个变量 byte类型
		byte b = 10; 

		System.out.println(b);


		//2: 转换
		int n = b;
		System.out.println(n);


		//3:四则运算会触发自动类型转换
		char m = 10+'A'; // 编译的时候就10+'A'=>常量折叠 已经做完了 执行的时候 char m = 75;
		System.out.println(m);



		char ch = 'A';
		int result = 10+ch;  // 类型转换  编译期间做的 char = int 检查的时候报错了 
		System.out.println(result); 


		// boolean是不可以参与运算的
		boolean flag = true;
		n = flag+1;
		System.out.println(n);


	}
}

  • 四则运算都会触发类型转换,自动向上提升(小变大)。

II、强制类型转换

// 测试基本数据类型的强制转换
public class Convert02{
	public static void main(String[] args) {
		
		
		char ch = 'A';
		char result = (char)(10+ch);  // char+char不是char 是int
		System.out.println(result); 




		ch = 'A';
		result = (char)(65535+ch);  // char+char不是char 是int
		System.out.println(result); 


		byte b = (byte)135;
		System.out.println(b); 

	}
}

Tips:强转有风险、转换需谨慎;但是实际上是不需要谨慎的(你能够确定是否会出现数据问题)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值