JAVA基本语法:数据类型

java使用两种数据类型,对现实世界进行分类:

JAVA是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间:JAVA中,整数的默认类型是int;小数的默认类型是double

1.基本数据类型:(四类八种)

        整数类:byte short int long(存在四种整数类型的原因根据内存的不同,合理分配内存空间

        小数类:float  double(可能出现小数位不精确的现象

        字符类:char

        注:char是关键字,并且属于基本数据类型,使用单引号括住一个字符。而String属于引用数据类型中的类,使用双引号括住多个字符。在计算机中以ASCII码/unicode码等(以数字代替字符)来存储字符。

        布尔类:boolean

2.引用数据类型:除了基本数据类型以外的所有类型

        类class、数组[ ]、接口interface

数据类型间的转换:

        默认转换:byte,short,char—int—long—float—double

        强制转换:目标类型 变量名=(目标类型)(被转换的数据);

        注:布尔类型不能转为其它类型;byte,short,char相互之间不转换,他们参与运算首先转换为int类型。


相关注意事项:

不同数据类型的赋值要求:

/**
	案例:使用8种数据类型定义变量
	JAVA中,整数的默认类型是int;小数的默认类型是double。
*/
class Demo01{
	public static void main(String[] args){
		/*
		将int类型的123赋值给byte,也是把大类型的数据赋值给小类型,但不会赋值;
		定义byte、short类型的变量只要右边的整数数值在范围内,就可以复制给byte、short
		*/
		byte a = 123;   
		short b = 489;
		int c = 456;
		/*
		int类型范围小于long类型,转型是会自动在数值位补零。
		加上L的原因是:可以对d赋超出int类型范围的值。即告诉计算机以8个字节存储256。
		*/
		long d = 256L;   
		/*
		报错:从double转换到float可能会有损失;
		原因:这是一条赋值语句,是把等号右边的值,赋值给等号左边的变量,等号
			
		*/
		float e = 1.2f;  //小数的默认类型是double,添加f不会出现不兼容的错误提示。
		double f = 1.5;
		char g = 'c';    //字符有单引号括住,并且只能有一个字符
		boolean m = true;
}

数据类型间的运算:

/**
	数据类型之间的运算:
	byte,short,char类型是不能直接参与运算的,需要先转成int类型。
	默认转换:byte,short,char—int—long—float—double
	
	给byte,short赋值的时候,先看等号的右边有没有变量:
	1.如果有变量,就按照上面的规则看右侧范围是否在左边的范围之内,若超过则会报错。
	2.如果都是常量,就看最终的结果是否在左边的范围之内,如果在就可以直接赋值。
*/
class DataTypeDemo3{
	public static void main(String[] args){
		
		byte b1 = 3,b2 = 4,b;
		/*
			错误:不兼容的类型:从int转换到byte可能会有损失
			原因:b1,b2是变量,并且它的类型默认转为int类型,此时int类型范围
			是大于byte的,而程序只有在解释阶段(java阶段)才会知道变量的范围,
			因此在编译阶段会出现错误。
		*/
		b = b1 + b2;
		b = 3 + 4;     //正确,类似于byte b = 7;
		
		float f = 12.4f;
		/*
			通过程序演示,发现可以把一个8字节的long类型数值赋值给4个字节的
			float类型变量。主要原因是二者使用二进制表示形式的不一致,因为
			float的范围是远远大于长整型long的
		*/
		float f1 = 134L;
		float f2 = 120;    //正确,int类型范围小于float
		float f3 = 120.0; //错误,double类型的范围大于float,需要改写成120.0f
	}
}

基本类型中的char类型:

char类型直接打印,用的是它所代表的字符。char类型参与运算,用的是他底层的编码

/**
	ASCII 美国首先编写的,只用到了0-127。ASCII码占用了1byte 0-255 -->使用数字代表字符
	(前32个字符实际是没有意义的,主要是打印的时候使用)
	
	GBK码->GB2312码->GB18320码,中国编写的,主要存中文字符。英文/数字 1个字节;中文 2个字节
	
	ISO:国际标准化组织。将各个国家编的码表统一在了一起,unicode(万国码/字符集) 占用2个字节
	由于unicode占用2个字节,而英文只占用1个字节。在使用unicode编写英文时会浪费资源。
	因此在unicode的基础上出现了另外一些码表:
	---  utf-8(可变字节数来表示字符)   英文/数字  1个字节;中文  3个字节
	---  utf-16
	Big5:台湾地区使用。
	
	char的默认值为"\u0000",\u表示使用unicode编码,本质上代表0,表现形式是空格。需要注意的是ASCII码有表示空格的数字
	char占两个字节(0-65535),使用unicode编码。
*/
class DataTypeDemo4{
	public static void main(String[] args){
		
		//char类型直接打印,用的是它所代表的字符。char类型参与运算,用的是他底层的编码。
		char ch1 = 'a';
		System.out.println(ch1);
		System.out.println(ch1+1);
		
		char ch2 = 98;
		System.out.println(ch2);
		
		char ch3 = '\u0063';      //"\u"后面是4位的十六进制,即99
		System.out.println(ch3);  //c
	}
}

字符串、字符与整数的计算:

/**
	+ : 正号;加法运算;字符串的拼接。
	
	要注意运算的顺序:从左到右依次运算,有括号的先算括号里的。(先算乘除,后算加减)
	String和任意类型做加法,得到的都是String,值就是拼接后的结果
	
	java不同于C++,布尔类型不能和其它基本数据类型做运算。即java中的true不代表1。
*/
class DataTypeDemo5{
	public static void main(String[] args){
		int a = +10;
		System.out.println('a');       //a
		System.out.println('a' + 1);   //98
		System.out.println("hello" + 'a' + 1);   //helloa1
		System.out.println('a' + 1 + "hello");   //98hello
		System.out.println("5+5=" + 5 + 5);      //5+5=55
		System.out.println("5+5=" + (5+5));      //5+5=10
		System.out.println(5 + 5 +"=5+5");       //10=5+5
		
		//System.out.println(true + '1');        //错误:二元运算符‘+’的操作类型错误
		System.out.println(true + "1");        //true1
	}
}

强制类型转换:

/**
	强制类型转换的格式:目标类型  变量名 = (目标类型)常量/变量;
	
	基本数据类型:除了boolean类型以外,其它7种类型都可以相互转换;
				  一般是在把大类型转成小类型的时候使用强制类型转换。
	引用数据类型:也可以使用强制类型转换,但必须具备子父类的关系。	
*/
class ForceTypeTransform{
	public static void main(String[] A){
		int a = 10;
		long b = a;    //默认类型转化:byte,short,char—int—long—float—double
		System.out.println(b);
		
		long c = 10;
		//int d = c;    //错误:不兼容的类型,从long转换到int可能会有损失
		
		int d = (int)c;  //强制类型转换
		
		byte by = (byte)130;
		System.out.println(by)   //结果是-126
	}
}

上述代码中130>byte的范围,对他强制转型后等于-126。原理如下:

猜你喜欢

转载自blog.csdn.net/AI_drag0n/article/details/84593725
今日推荐