(千里之行,始于足下)JavaSE:数据类型

Java基础语法

一. Java数据类型及运算符

1. 基本数据类型

数据类型大小(字节)备注
byte1
short2
int4整型常量默认为int
long8定义变量时,以“l”或“L”结束;不加默认为int,会自己进行类型提升,如果超过int,会报错;
float4定义变量时,要以“f”或“F”结束(不加编译失败);**同为四位,但是比long表示范围大,**因为在一块区间中分为两部分:一部分表示数值,一部分表示10的指数。
double8浮点型常量,默认为double
char2只能写一个字符;转义字符;或者Unicode值表示的字符型常量
booleanJvm决定只能取 true/false
  • 转移字符“ \\n”,"\""

2. 引用数据类型

  • 接口
  • 数组

3. 运算规格(不包含boolean)

3.1 自动类型提升
  • 容量小的和容量大的进行运算时,自动提升为容量大的数据类型;
    • 此时的容量大小,指的是表示数的范围的大小。
    • byte、char、short<int<long<float<double
3.2 强制类型转换
  • 自动类型提升的逆运算

    1. 可能精度丢失
    double d = 14.9;
    int i = (double)d; //14,精度丢失
    
    int i2 = 128;
    byte b = (byte)i2; // -128
    

4. String

  • “”,双引号字符串;‘’单引号char类型,用+号时,切记出错。

  • 引用数据类型

    String s = “hello world”;  //长度不要超过内存大小就好了
    
  • 可以和八种基本数据类型做运算,只能用连接符号 + ,结果为String

    char c  = 'a'; // 97  A:65
    int num = 10;
    String str = "hello"
    System.out.printf(c+num+str);	// 107hello
    System.out.printf(c+str+num);	// ahello 
    System.out.printf(c+(num+str));	// a10hello
    System.out.printf((c+num)+str);	// 107hello
    System.out.printf(str+num+c);	// hello10a
    

5. 进制

进制开头
二进制0b/0B
十进制
八进制0
十六进制0x/0X

6. 三码

  • 原码(正数三码合一,负数不同)
  • 反码:除了符号位外,其余位取反
  • 补码:反码+1
  • 计算机底层都以补码的方式来存储数据
    • 如果是负数补码,即最高位位1,求原码:按位取反,末尾+1(进位)

7. 运算符

7.1 逻辑运算符
  • 操作的都是布尔值
  • &&与||都有短路特性
aba&ba&&ba|ba||b!aa^b
truetruetruetruetruetruefalsefalse
truefalsefalsefalsetruetruefalsetrue
falsetruefalsefalsetruetruetruetrue
falsefalsefalsefalsefalsefalsetruefalse
7.2 位运算符
运算符运算解释
<<左移在一定范围内,往左移n位,值扩大2^n,剩余用0补;移位过多,会变成负数
>>右移即在右移的基础上,补空缺位时**,如果原最高位为1,则最高位补1;否补0;**
>>>无符号右移即右移直接补0,不考虑原数的正负,即原数的最高位
&与运算只有同为1时,结果为1
|或运算只有同为0时,结果为0
^异或两个不同为1
~取反包括符号位在内,按位取反
  • 面试题:如何高效的计算 2 * 8

    • 2<<3
    • 8<<1
  • 练习:交换两个变量的值

    int num1 = 10;
    int num2 = 20;
    // 1. 定义中间变量
    
    // 2. 
    // 2.1 优:不用定义临时变量
    //     缺: 1.相加操作可能超出存储范围
    //		   2.有局限性:只可以适用于数值类型
    num1 = num1 + num2;
    num2 = num1 - num2;
    num1 = num1 - num2;
    
    //3. 使用位运算符 
    num1 = num1 ^ num2;
    num2 = num1 ^ num2;
    num1 = num1 ^ num2;
    
7.3 三元运算符
  • 结构:(条件表达式)?表达式1:表达式2
    • 表达式1与表达式2 要求是可以统一为一个类型,用于返回值接收
  • 三元运算符可以转为if-else,反之并不恒成立
  • 优先使用三元运算符,简洁执行效率高
7.4 赋值运算符
  • – 、 ++ 、+= …
  • 不会改变数据类型
7.5 比较运算符
  • “>” 、<、 >=、<=、
  • instanceof
7.6 运算符优先级

在这里插入图片描述

二. 流程控制

1. 顺序结构

2. 分支结构

2.1 if-else
2.2 switch-case
  • switch结构中的表达式,只能是如下6种数据类型之一:
    • byte
    • short
    • char
    • int
    • 枚举类型(JDK5.0)
    • String(JDK7.0)
  • case之后只能声明常量,而不能声明范围
  • [default] 默认,最终如果无匹配,则执行

3. 循环结构

3.1 for
  • 执行顺序是 A-B-D-C-B-D-C-B
  • B必须是布尔类型
for(A;B;C){
    D
}
3.2 while
  • for循环与while循环的初始化条件作用范围不同
3.3 do-while
  • 至少会执行一次循环体
3.4 break-continue
  • break

    • 默认跳出包裹此关键字最近的一层循环

    • 带标签的break:

      label:for(;;){
          for(;;){
              break label;
          }
      }
      
  • continue

    • 同break默认
    • 带标签的continue,同上
3.5 获取100以内的质数
label:for(int i=2;i<100;i++){
    for(int j=2;j<=Math.sqrt(i);i++){
        if(i%j == 0){
			continue label;
        }
    }
    System.out.printf(i);
}
  • 同break默认
  • 带标签的continue,同上
3.5 获取100以内的质数
label:for(int i=2;i<100;i++){
    for(int j=2;j<=Math.sqrt(i);i++){
        if(i%j == 0){
			continue label;
        }
    }
    System.out.printf(i);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值