数据类型转换及运算符

本文详细介绍了Java中的数据类型转换,包括自动类型转换和强制类型转换,特别强调了转换可能带来的精度损失。此外,还讲解了字符串、标识符命名规范以及进制转换。同时,对算术运算符、赋值运算符、关系运算符和逻辑运算符进行了说明,并探讨了位运算符的使用。最后,提到了三目运算符的运用。
摘要由CSDN通过智能技术生成

数据类型转换

  • 除了boolean其他都是数值型,相互之间可以转换

  • 自动类型转换

    • 自动完成,我们感觉没有变化,不会出现任何问题,小转大(小或者大指范围)

    • 自动类型转换特殊情况会丢失精度,int转float,long转float,long转double(取值虽然在目标范围之内,但是超过目标范围的精确度)

      public static void main(String[]args) {
      		long age = 18888888888888888L;
      		float a;
      		a=age;
      		System.out.println(age);
      		System.out.println(a);
      		System.out.println(1.0-0.1-0.1-0.1-0.1-0.1);//0.50000000001
      	}
      
  • 强制类型转换(数据造型)

    • 大转小的直接转,异常不兼容的类型

    • 语法:在需要转的值或变量前用小括号里面写需要转的类型;

    • 范围溢出(超过最大值部分,从最小开始往上加)

      	long age = 188888888888888888L;
      		int a;
      		a=(int)age;
      		System.out.println(age);
      		System.out.println(a);-1809464343
      		System.out.println(1.0-0.1-0.1-0.1-0.1-0.1);
      	}
      

String

  • 值引号包围

  • 转义符。特殊符号需要转义

  • \n: 换行

  • \t: tab键

  • \\

  • 一个tab四个空格,tab实际是Excel中的一个单元格

    public static void main(String[]args) {
    		//String name = "名字:ABC\t性别:a\t年龄:25";
    		//System.out.println(name);
    		System.out.println("\t我是一个三好学生按时上课");
    		System.out.println("我\t是一个三好学生按时上课");
    		System.out.println("我是\t一个三好学生按时上课");
    		System.out.println("我是一\t个三好学生按时上课");
    		System.out.println("我是一个\\t三好学生按时上课");
    		System.out.println("我是一个三\t好学生按时上课");
    		System.out.println("我是一个三好\t学生按时上课");
    	}
    

标识符命名

  • 标识符:就是你起名字的地方
  • 可以选的字符:A ~ Z a ~ z 0 ~ 9 _ $
  • 标识符首字符不能是数字大小写字母,$ _
  • 其他字符可以是64个中任意
  • 类名必须大写开头
  • 变量名小写
  • 常量所有字符都大写
  • 在不影响代码的情况下,尽可能的通俗易懂,做到见名知意
    • 驼峰命名法:每个单词首字母大写,其他小写
      • 大驼峰:每个单词首字母大写,其他小写,AvgAge,TitleName
      • 小驼峰:首单词的首字母小写avgAge
    • 匈牙利命名法
      • 每个单词按照命名习惯写,中间用下划线个开
      • avg_age、Title_name;
  • java中的关键字和保留字不能用来命名
    • 关键字:jdk已经定义了的,class,void,public,数据类型,final
    • 保留字:以后有可能成为关键字,但现在还不是关键字的单词,true,false,goto

进制转换

  • 十进制:0 ~ 9 int a = 129;

  • 二进制:0 ~ 1 int b = 0b/0B10;

  • 八进制:0 ~ 7 int c = 017;

  • 十六进制:0 ~ F int d = 0x5F;

  • 转换

    • 十进制转其他进制:
      • 除以进制数取余,从下往上读
    • 其他进制转十进制:
      • 每一位乘以进制数位数次方相加;
      • 0b0101011100;0*20+0 * 21
  • 小数:跟整数部分相反

  • float:4 39 int 4 10 long 8 double

  • 1 2 3 指数

  • 0000 0000 0000 0000 0000 0000 0000 0000int

  • 00000000 0000000000000

  • 01 你好 125 -10

  • 第一位表示符号位,1为负数,0正数

public static void main(String[]args) {
		//16进制
		int age = 0xff;//15*160+15*161=15+240=255
		//二进制
		int a = 0b111;//-7        10000000000111
		//八进制
		double score = 00.5;
		System.out.println(age);
	}

运算符

  • 表达式:数据+运算符 1+2=3 int a = 3;

  • 算术运算符

    • 表达式会自动提升数据类型

    • +:

      • 等同数学上的加法运算,就是类似3+5
      • 字符串拼接String s1 = “abc”;String s2 = “bcd”;s1+s2:abcbcd
      • 任何数据类型,与字符串拼接,得到的都是字符串
      • 表达式中只要有字符串,计算到该字符串后,整个结果都变成拼接
    • -:等同于数学上的减号,就是减法运算

    • *:等同于数学上的乘法运算,写法不同,X

    • /:等同于数学的除法,写法不同3/2=1

    • %:取余,取模,3%2=1,余数的符号与被除数的符号一直,与除数符号无关

      public static void main(String[]args) {
      		//System.out.println(1/0);//除数不能为0
      		System.out.println(1/0.0);//无限,无穷
      		//System.out.println(0/0);
      		System.out.println(0.0/0.0);//NaN
      		System.out.println(0/0.0);//NaN
      		System.out.println(-1/0.0);//-Infinity
      		System.out.println(1/-0.0);//-Infinity 
      		System.out.println(-1/-0.0);//Infinity
      		//-6/-3=2;==》2*-3=-6
      		System.out.println(3%2);//1
      		System.out.println(3%-2);//1
      		System.out.println(-3%2);//-1
      		System.out.println(-3%-2);//-1
      		//-3/-2=-1...1===》1*-2-1=-3;
      	}
      
  • 赋值运算符

    • =
    • +=:
    • -=:
    • *=:
    • /=:
    • %=:不会出现类型转换问题,都是自动完成计算,自动完成类型转换
  • 双目运算符

    • ++:自增运算+1 int a =3;a+±->a+=1–>a=a+1;
    • –:自减运算-1
    		//int a = 15;//等号赋值
    		byte b = 10;
    		//b+=10;
    		//b=b+10;
    		//a+=10;//a=a+10;
    		System.out.println(b);
    		System.out.println("=====================");
    		int a = 5;
    		System.out.println(a+=1);//6
    		a=a+1;//6+1
    		System.out.println(a);//7
    		//a++;//++在后,如果是只有自己,就是数值自增1,如果还有其他运算,先运算再自增1
    		System.out.println(++a);//8++在前,先自增,再进行其他运算
    		System.out.println("=========================");
    		int c = 10;
    		int e;
    		e=++c;
    		System.out.println(e);//11
    		System.out.println(c);//11
    		System.out.println("=========================");
    		int x = 5;//6  7  6 7
    		int y = 2;//3 2
    		//6+6+3+6+2=23
    		//int z = ++x + x+ ++y + x++ + --y;//z 11   19  23  20
    		//5+7-6+3-2-7=0
    		//int z = x++ + ++x - --x + ++y - --y - ++x;//0
    		int z = x-- + --x - --y + x-- - --y + ++x - x++;//10
    		System.out.println(z);
    	}
    
  • 关系运算符(判断两个变量的大小关系)

    • >:大于

    • <:小于

    • <=:小于等于

    • >=:大于等于(以上稚只能用于数值变量的运算)

    • ==:等于,可以做数值型或非数值型运算

    • !=:不等于(==和!=可以用于任意类型的变量的计算)

      	public static void main(String[]args) {
      		int a = 5;
      		int b = 3;
      		double c = 3.14;
      		float d = 2.8f;
      		long e = 2555555555L;
      		String str = "abd";
      		String Str1 = "abd";
      		String Str2 = "bcd";
      		Scanner input1 = new Scanner(System.in);
      		System.out.println("输入abd");
      		Scanner input2 = new Scanner(System.in);
      		//String str3 = input.next();
      		
      		System.out.println(input1==input2);//
      	}
      
  • 逻辑运算符(逻辑关系运算,操作的都是boolean类型数据)

    • &:与并且 ,必须两个条件同时成立才会成立,true&true->true;true&false->false;只要有一个表达式结果为false,则最终结果为false;

    • |:或,只要有一个表达式为true,则最终结果为true。

    • !:非表达式为true,结果就是false,表达式为false,结果就是true

    • &&:短路与判断跟&一样,有一个表达式为false,则结果为false,如果第一个表达式已经是false,则不会判断第二个表达式

    • ||:短路或,同&&第一个为true,直接返回结果

      public static void main(String[]args) {
      		int a = 5;
      		int b = 3;
      		double c = 3.14;
      		float d = 2.8f;
      		long e = 2555555555L;
      		String str = "abd";
      		String Str1 = "abd";
      		String Str2 = "bcd";
      		Scanner input1 = new Scanner(System.in);
      		System.out.println("输入abd");
      		Scanner input2 = new Scanner(System.in);
      		//String str3 = input.next();
      		boolean flag = false;
      		System.out.println(a<b&&(++b>c));//false
      		System.out.println(b);//3
      	}
    

回数判断

 System.out.println("请输入一个5位数的数字:");
      		int h = input.nextInt();
     		//个位数
      		int z = h %10;
      		//十位数
       		int x = h /10 %10;
       		//百位数
       		int n = h /100 %10;
       		//千位数
       		int v = h /1000 %10;
       		//万位数
       		int m = h /10000%10;
       		if (z == m && x == v){
       			System.out.println("你输入的是回数");
       		}else System.out.println("你输入的有误!");

运算符

  • 位运算符:(二进制运算01)写一个效率最高的幂方法运算

    • &:与:4&3=0 密码 :遇0则0
    • |:或4|3:有一说一
    • ~:非:取反,取反后得到的是负数,实际就是一个补码,要通过补码得到源码
    • ^:异或:密码学中用的最多。相同为0,不同为1,一个数,异或另一个两次,还是自己。
    • 2568 ^ 5 346676 ^ 5 2586
    • >>:右移,多少位,就是除以2 的多少次方
    • <<:左移,乘以2的多少次方
    • >>>:无符号右移:将负数的符号位当做正常位数处理。
    • 补码:1111 1011 负数4==》1000 0101源码==》反码==>补码
    • 正数:源码、反码、补码一样
    • 负数在计算机中是以补码的形式存在的。因为计算机为了设计简单
    • 如计算机要有加法能,有加法运算的算法存在,必须有减法
    • 3-2 ==》3+(-2)
    • -4==》1000 0100
    • 0111 1011:反码
    • 0111 1100:补码(取反+1)
    public static void main(String[]args) {
    		int a = 4;
    		int b = 3;
    		System.out.println(a&b);
    		System.out.println(a|b);
    		System.out.println(~4);
    		System.out.println(a^b);
    		//有ab两个变量,在不借助第三个变量的情况下,交换值
    		a=a^b;
    		b=a^b;//a^b^b==a
    		a=a^b;//a^b^a==b
    		System.out.println("a的值是"+a);
    		System.out.println("b的值是"+b);
    		System.out.println(-4>>2);//1
    		System.out.println(3<<2);//0000 0011==>0000 1100     12
    		System.out.println(-4>>>2);//移动不管是不是符号位
    	}
    
  • 三目运算符、三元运算符、条件运算符

    • 语法:boolean表达式?值1:值2

    • 当前面的boolean结果是true,则返回值1,否则返回值2

      public static void main(String[]args) {
      		Scanner input = new Scanner(System.in);
      		int a = 15;
      		int b = input.nextInt();
      		int c = input.nextInt();
      		System.out.println((a>b?a:b)>c?(a>b?a:b):c);
      		//只要有以下情况:首先想到用那个三目
      		//如果条件成立,则怎么,否则怎么样
      		//或者,如果条件成立,则返回什么,否则返回另外一个
      		double salary = input.nextDouble();
      		System.out.println(salary>5000?"买个车山下班":"挤地铁");
      	}
      
    • 注意:三目一定会有一个返回值,这个返回值一定要使用,否则报错;

不同:

  • &&和&:

  • &&短路与,运算符两边是boolean表达式,只有两边都是true结果才是true,而当第一个表达式结果为false,第二个不会运行表达式1&&表达式2,效率稍微高一点

  • &,结果同上作为逻辑与,不管第一个表达式结果如果,都会进行第二个的计算,其次可以作为位运算符,位运算时两边操作的是整数

  • 看两边的操作数,如果是Boolean类型,就是逻辑或,如果是整数位运算

  • num1=num1^num2异或同一个数两次,得到的还是自己。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值