zoukankan      html  css  js  c++  java
  • java基础---3. 数据类型转换、运算符

    1. 数据类型的转换

    当数据类型不一样时,将会发生数据类型转换

    • 自动类型转换(隐式)
    • 强制类型转换(显示)

    1.1 自动类型转换(隐式)

    特点:代码不需要进行特殊处理,自动完成
    规则:数据范围从小到大(与字节数未必相关)

    public class Demo01DataType {
    	public static void main(String[] args) {
    		System.out.println(1024);//这就是一个整数,默认就是int类型
    		System.out.println(3.14);//这就是一个浮点数,默认就是double类型
    		
    		//1.整数和整数
    		//左边是long,右边默认int
    		//int--->long,符合数据范围从小到大,所以int可以自动转换成long
    		long num1=100;
    		System.out.println(num1);//100
    		
    		//2.浮点数和浮点数
    		//左边是double,右边默认float
    		//float--->double,符合数据范围从小到大,所以float可以自动转换成double
    		double num2=2.5F;
    		System.out.println(num2);
    		
    		//3.整数和浮点数
    		//左边是float,右边是long
    		//long--->float,符合范围从小到大
    		float num3=30L;
    		System.out.println(num3);//30.0
    	}
    }
    

    1.2 强制类型转换(显示)

    特点:代码需要进行特殊的格式处理,不可以自动完成

    public class Demo02DataType{
    	public static void main(String[] args){
    		//左边是int,右边是long
    		//long--->int,不符合数据范围从小到大,不会自动转换
    		//强制转换如下:
    		int num=(int)100L;
    		System.out.println(num);//100
    		//这种情况不加强制转化就会报错
    	}
    }
    

    注意事项:

    • 强制类型转换一般不推荐使用,有可能会发生数据溢出或者精度损失
    //将Long强制转换成int
    int num2=(int)6000000000L;//若不加(int)会报错
    System.out.println(num2);//1705032704 数据溢出
    		
    //double--->int,强制类型转换
    int num3=(int) 3.9;
    System.out.println(num3);//3 精度损失
    
    • byte、short、char这三种类型都可以发生数学运算,例如加法“+”
    char ch='A';//这是一个字符型变量,里面是大写字母A
    System.out.println(ch+1);//66
    
    • byte、short、char这三种类型在运算的时候,都会被首先提升为int类型,然后再计算
    byte num4=40;
    byte num5=50;
    //byte result1=num4+num5;//报错 从int转换到byte可能会有损失
    //报错原因:在运算的时候,byte会被提升为int(即num4转换为int,num5转换为int),所以result1应该用int接收
    int result1=num4+num5;
    System.out.println(result1);//90
    		
    short num6=60;	//如果result2不用int接收,非要用short接收,在num4和num5进行强制类型转换的时候必须保证num4+num5逻辑上真实大小本来就没有超出short范围,否则会发生数据溢出
    short result2=(short)(num6+num5);
    System.out.println(result2);//110
    
    • 注意:java中的boolean不可以发生数据类型转换

    数字和字符的对照关系(编码表):

    • ASCII码表:American Standard Code for Information Interchange,美国信息交换标准代码。
    • Unicode:万国码。也是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但是从128开始包含有更多字符。
      48----> '0'
      65----> 'A'
      97----> 'a'
    public class Demo03DataTypeChar {
    	public static void main(String[] args){
    		//1.输出ASCII值
    		//加了一个int类型的0,有加法运算就会将char类型提升为int类型,所以这里会输出字符'1'的ASCII值
    		char ch='1';
    		System.out.println(ch+0);//49
    		
    		//2.输出ASCII值
    		char ch1='c';
    		int num=ch1;//自动类型转换
    		System.out.println(num);//99
    		
    		//3.unicode编码
    		char ch2='中';
    		System.out.println(ch2+0);//20013  已经超出了ASCII的范围了
    		
    	}
    }
    

    2 算术运算符

    2.1 算数运算符_四则运算

    • 四则运算:加减乘除:+ - * /
    public class Demo04Operator {
    	public static void main(String[] args){
    		int x=10;
    		int y=3;
    		//对于一个整数表达式,int除以int得到的还是一个int
    		int result1=x/y;
    		System.out.println(result1);//3
    	}
    }
    
    • 取模:% 只有对于整数的除法,取模运算符才有意义

    注意事项:一旦运算当中有不同类型的数据,那么结果将会是数据范围大的那种,但同时不要忘了byte、short、char在运算的时候都会自动提升为int类型再进行计算。

    int z=6;
    //int+double-->double+double-->double
    double result2=z+2.5;
    System.out.println(result2);//8.5
    		
    //但同时不要忘了byte、short、char在运算的时候都会自动提升为int类型再进行计算
    

    2.2 算数运算符_四则运算当中加号"+"有常见的三种用法

    • 1.对于数值来说,那就是加法
    • 2.对于字符char类型来说,在计算之前,char会被提升为int,然后再计算。char类型字符,和int类型数字,之间的对照关系表:ASCII、Unicode
    • 3.对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作。任何数据类型和字符串进行连接的时候,都会变成字符串。
    public class Demo05Plus {
    	public static void main(String[] args) {
    		//字符串类型变量的基本使用
    		String str1="Hello";
    		System.out.println(str1);//Hello
    		
    		System.out.println("Hello"+"Word");//HelloWord
    		
    		System.out.println(str1+20);//Hello20
    		
    		//优先级问题
    		
    		System.out.println(str1+20+30);//Hello2030
    		
    		System.out.println(str1+(20+30));//Hello50
    	}
    }
    

    2.3 算数运算符_自增自减运算符

    • 自增运算符:++
    • 自减运算符:--
      使用方法:
    • 单独使用:前++和后++没有区别
    • 混合使用:若为前++,那么变量立马加1,之后拿着结果进行使用;若是后++,那么首先使用变量本来的值,然后再让变量加1。
    • 只有变量可以使用自增自减运算符,常量不可以使用
    public class Demo06Operator {
    	public static void main(String[] args) {
    		int num1=10;
    		System.out.println(num1);//10
    		//单独使用
    		System.out.println(++num1);//11
    		System.out.println(num1++);//12
    		
    		//与打印操作混合使用
    		int num2=20;
    		System.out.println(++num2);//21先加后用
    		System.out.println(num2);//21
    		int num3=30;
    		System.out.println(num3++);//30先用后加
    		System.out.println(num3);//31
    		
    		//与赋值操作混合
    		int num4=40;
    		int result1= --num4;
    		System.out.println(result1);//39
    		System.out.println(num4);//39
    		
    		int num5=50;
    		int result2=num5--;
    		System.out.println(result2);//50
    		System.out.println(num5);//49
    		
    		//举例
    		int x=10;
    		int y=20;
    		int result3= ++x + y--;
    		System.out.println(result3);//31
    		System.out.println(x);//11
    		System.out.println(y);//19
    	}
    }
    

    3 赋值运算符

    赋值运算符:=
    复合赋值运算符:+= -= *= /= %=

    • 只有变量可以使用赋值运算符,常量不可以使用
    • 复合赋值运算符隐含了一个强制类型转换
    public class Demo07Operator {
    	public static void main(String[] args) {
    		byte num = 30;
    		num += 5;
    		// num=num+5
    		// num=byte+int
    		// num=int+int
    		// num=int
    		// num=(byte)int 强制类型转换
    		System.out.println(num);//35 是一个byte类型的变量
    	}
    }
    

    4 比较运算符

    == < > >= <= !=

    • 比较运算符的结构是一个bool值,不成立就是false ,成立就是true
    • 比较运算符不可以连写

    5 逻辑运算符

    • 与&& 或|| 非!
    • 其中“与&&” 和 “或||”具有短路效果
    • “与&&” 和 “或||” 左右都必须是bool值
    • 与&&” 和 “或||”运算符,如果有多个条件可以连续写:条件A && 条件A && 条件A

    6 三元运算符

    public class Demo08Operator {
    	public static void main(String[] args) {
    		int a = 10;
    		int b = 20;
    		//格式
    		//数据类型 变量名称 = 条件判断 ? 表达式A :表达式B
    		int max = a > b ? a : b;
    		System.out.println("最大值" + max);//20
    		
    		//注意
    		//1. 必须保证表达式A的值和表达式B的值都符合左侧数据类型的要求
    		//int result = 3 > 4 ? 2.5 : 10;//报错 写法错误
    		
    		//2. 三元运算符的结果必须被使用
    		//a > b ? a : b;//报错: 不是语句
    		System.out.println(a > b ? a : b);//20
    		
    	}
    }
    

    变量赋值时的注意事项总结:

    • (1)赋值号右边:观察常量值大小是否在对应的数据类型范围(默认情况下是int/double)内,如果超过范围则直接报错。
    //long num6=3000000000;//会报错,没有加L默认是int(30亿超过了int的范围)
    long num6=3000000000L;
    
    • 赋值号左边:观察被赋值的变量类型是否可以成功接收右边的常量

    何为成功接收:

    • (2)自动类型转换(隐式):数据范围从小到大(与字节数未必相关)
    • (3)强制类型转换(显示):不符合数据范围从小到大,一般不推荐使用,有可能会发生数据溢出或者精度损失
    • byte、short、char这三种类型在运算的时候,都会被首先提升为int类型,然后再计算
    • (4)对于byte/short/char三种类型来,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含地为我们补上一个强制类型转换(byte)(short)(char),如果右侧超过了左侧的范围,那么直接编译器报错
    • So:整形常量默认为int类型,在不做强制类型转换的情况下,在不超出左边变量范围的情况下,它可以赋值给除了boolean类型之外的任何数据类型,而不会报错
    byte num = 30;
    short num1 = 30;
    long num2 = 30;
    float num3 = 30;
    double num4 = 30;
    char num5 = 30;
    
  • 相关阅读:
    CNZZ公告:近期无法获取百度关键词
    怎样注册uber司机 如何注册uber司机 最新详细攻略
    Uber司机一周体验记:成单率仅57%
    Uber司机手机终端问答篇
    Uber 司机有话说:你以为当个 Uber 司机很轻松?大错特错!
    每门编程语言修复了什么
    let区别(关于racket和r5rs)
    Bloom Filter
    静态作用域与动态作用域
    C 语言的可变参数表函数的设计
  • 原文地址:https://www.cnblogs.com/deer-cen/p/12118089.html
Copyright © 2011-2022 走看看