数据类型与运算符

1 数据类型

1.1 基本数据类型

四类八种
整型:

类型所占内存表数范围
byte 字节型1个字节 1B = 8b[-128,127]
short 短整型2个字节 -2^15 ~ 2^15-1(-32768~32767)
int 整形4个字节 -2^31 ~ 2^31-1(-2147483648~2147483647) 约21亿
long 长整型8个字节 -2^63 ~ 2^63-1非常大

浮点型:

类型所占内存表数范围精度
float 单精度4字节-3.403E38~3.403E386-7位
double 双精度8字节-1.798E308~1.798E30815-16位

字符型:

类型所占内存赋值
字符型 char2个字节

布尔型:

类型所占内存赋值
布尔型 boolean1个字节true、false

1.2 引用数据类型

  • 类 : class
  • 数组 : []
  • 接口 : interface

1.3 数据类型转换

  • 对应类型的数据赋值给对应类型的变量

  • 自动类型提升:
    小 ===>大:可以正常存放,但是可能会造成内存的浪费。

    byte – >short --> int —> long --> float —> double

  • 强制类型转换
    大===>小:不能发生,有可能会造成损失精度。
    小范围类型 变量名 = (小范围类型)大范围类型数据;

  • 注意:

   如果存储多种类型的数据参与运算,结果类型为参与运算的最大类型
   如果结果类型为<int类型,最终会自动提升 为int类型
   如果为byte,short,char赋值时候,把int类型的常量,只要范围 允许可以成功赋值
   boolean不参与类型转换

2 数据类型使用

2.1 基本数据类型

int i =1;			  		  

2.2 引用数据类型使用

  • 导包 : 指明要使用类型的位置
    import 包名.类名;
    定义在类的上面
  • 引用数据类型 引用|变量名 = new 引用数据类型();
  • 使用功能
    引用.公共名字();

2.2.1 Scanner的使用

  • 导包:

    import java.util.Scanner;
    
  • 创建Scanner类型的引用

    Scanner sc = new Scanner(System.in);	
    
  • 使用功能
    引用.nextInt() ===>接收用户键盘输入int类型的内容
    引用.nextByte()
    引用.nextShort()
    引用.nextLong()
    引用.nextDouble()
    引用.nextFloat()

注:

  引用.next() 接收用户键盘输入String类型的内容从有效字符开始接收,遇到 空格等不接受,遇到enter建结束功能。
  引用.nextLine() 接收用户键盘输入一整行的String类型的内容遇到enter建结束功能。
  不要定义与jdk中类型同名,同包的类, 如果在 nextLine上面存在系列的next功能,需要处理遗留enter问题。

public static void main(String[] args){
        //1.导入
        //2.创建 Scanner类型的引用
        Scanner sc = new Scanner(System.in);
        //3.使用功能
        System.out.println("请输入年龄 : ");
        int age = sc.nextInt();
        System.out.println(age);

        System.out.println("请输入薪资 : ");
        double sal = sc.nextDouble();
        System.out.println(sal);

        System.out.println("请输入用户名 : ");
        String name = sc.next();
        System.out.println(name);

        //处理遗留enter问题
        sc.nextLine();

        System.out.println("请输入用求偶标准 : ");
        String msg = sc.nextLine();
        System.out.println(msg);
    }

请添加图片描述
遇到enter键结束功能,求偶标椎没有输入,直接结束了。
请添加图片描述
2.2.2 Random的使用

  • import java.util.Random
  • Random ran = new Random();
  • ran.nextInt() 随机产生int范围内的整数
    ran.nextInt(整数n) 随机[0,n)整数
    ran.nextDouble() [0.0,1.0) 随机产生double范围的小数

总结:

随机整数:
   [0,n) ran.nextInt(整数n)
   [0,n] ran.nextInt(n+1)
   [min,max) ran.nextInt(max-min)+min
   ran.nextInt(max)->[0,max)
   ran.nextInt(max)+min->[min,max+min)
   ran.nextInt(max-min)+min->[0,max-min)+min -->[min,max)
   [min,max] ran.nextInt(max-min+1)+min

3 运算符

3.1 概念普及

  • 操作数 : 运算符左右两边的数据
  • 表达式 : 运算符连接操作数整体称为表达式
  • 语句 : 语句以;结束
  • 一元运算符|单目运算符 : 操作数只有一个 + -(正负号) ++ –
  • 二元运算符|双目运算符 : 操作数有两个 + - * /
  • 三元运算符|三目运算符 : 操作数有三个 条件运算符

3.2 运算符分类

  • 赋值运算符 =
  • 算数运算符 + - * / % ++ –
  • 关系运算符 > < >= <= == != instanceof
  • 逻辑运算符 & | ! ^ && ||
  • 扩展运算符 算数+赋值 位+赋值
  • 条件运算符 ?:
  • 位运算符

3.2.1 赋值运算符

  • 基础赋值运算符 =
// 赋值运算符是整个java中唯一的自右向左进行运算的,优先级最低
int num = 10; 
  • 扩展赋值运算符(算数运算符+基础赋值运算符 )
    +=,-=,*=,/=,%=
    优点:
      执行效率快
      自动做强制类型转换
    注意: 编译期间编译器会自动把可以实现的位置优化成为扩展赋值运算符

3.2.2 算数运算符 + - * / % ++ –

  • +:
    (1)正号 (省略)
    (2)加法运算
    (3)字符串的连接符
    当+左右两边一旦出现""字符串,+就做为字符串连接符,把左右两边的数据拼接成为一个字符串

System.out.println("hello"+'a'+1); //"helloa"+1="helloa1"
System.out.println('a'+1+"hello"); //98+"hello"  = "98hello"
  • - :
    (1)负号
    (2)减法运算

  • % 取余数 | 取余|模以
    当第一个操作数<第二个操作数,结果为第一个操作数

  • ++ - - 一元运算符 a++ ++a a-- --a
    ++ 自增 : 自身+1 , a++相当于a=a+1
    - - 自减 : 自身 - 1 , a- - 相当于 a=a-1

    规律 :
    只操作自己 :
      ++放在操作数的前面后面都是自身+1
      --放在操作数的前面后面都是自身-1
    影响其他结果 : (赋值,表达式,输出)
      ++ --放在操作数前面,先+1|-1,再去运算
      ++ - -放在操作数后面,先去运算,再进行+1|-1

3.2.3 比较运算符|关系运算符 > < >= <= == != instanceof

  • > < >= <= 基本数据类型中 除了 boolean之外的其他数据类型 不能比较引用类型
  • != == 既可以比较基本数据类型(包含boolean类型)也可以比较引用类型
System.out.println(true == true); //true
System.out.println("1" == "2");//false
  • instanceof 只能用来比较引用类型 某个变量是否是某个具体类型
System.out.println("abc" instanceof String);//true

注:

关系运算符最后的结果是一个boolean类型的变量

3.2.4 逻辑运算符 & | ! ^ && ||

  • 逻辑运算符左右两边的操作数只能是boolean值
  • & | ^ 基本上碰到就是位运算符
  • &和&& 两个操作数都为true结果为true 其他都为false
  • |和|| 两个操作数有一个位true结果为true,两个都是false结果才是false
  • ! true–>false false–>true
  • ^ 相同为false 不同为true
  • &和短路&&的区别: 运算结果一致,但是&&效率高因为左边的操作数- 如果为false 右边不参与运算
  • |和短路||的区别:运算结果一致,但是||效率高因为左边的操作数如果为true 右边不参与运算

3.2.5 条件运算符

  • 条件表达式 ? 值1 : 值2 ;

  • 条件表达式 : 值为boolean类型的表达式

  • 执行流程:
    1.计算条件表达式,得到boolean结果
    2.为true,结果为值1
    为false,结果为值2

3.2.6 位运算符

  • 位运算符(了解)
       把操作数转为二进制,然后根据运算符的规则运算,最终得到的结果转为十进制

& : 同一位的两个数,两个都为1才是1,一个为0就是0
| : 同一位的两个数,一个为1就是1,两个都为0才是0
^ : 同一位的两个数,相同为0不同为1

  • 注意 : 以上三个左右两边为boolean类型数据就作为逻辑运算符存在

  • 位移运算符
    >> 右移 8>>3==> 8 / 2 ^ 3(右移 :/2的次方)
    把第一个操作数转为二进制,向右移动第二个操作数个位数,移出的位数直接忽略不计,剩余的转为十进制。
    << 左移 8<<3 ==> 8*2^3(*2的次方)
    把第一个操作数转为二进制,向左移动第二个操作数个位数,空位补0,结果转为十进制。

  • 注意 : 建议使用位移运算符代替乘除,效率高

3.2.7 运算符优先级

  • 单目算数位关系,逻辑三目后赋值
运算符描述结合律
. [] ()字段访问、数组下标、函数调用以及表达式分组从左到右
++ – - ~ ! delete new typeof void一元运算符、返回数据类型、对象创建、未定义值从右到左
* / %乘法、除法、取模从左到右
+ - +加法、减法、字符串连接从左到右
<< >> >>>移位从左到右
< <= > >= instanceof小于、小于等于、大于、大于等于、instanceof从左到右
== != === !==等于、不等于、严格相等、非严格相等从左到右
&按位与从左到右
^按位异或从左到右
|按位或从左到右
&&逻辑与从左到右
||逻辑或从左到右
?:条件从右到左
= oP=赋值、运算赋值从右到左
,多重求值从左到右
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值