第2章_变量与运算符

author:尚硅谷-宋红康


1.数据类型

类型名称关键字占用内存取值范围
字节型byte1 字节-128~127
短整型short2 字节-32768~32767
整型int4 字节-2147483648~2147483647
长整型long8 字节-9223372036854775808L~9223372036854775807L
单精度浮点型float4 字节+/-3.4E+38F(6~7 个有效位)
双精度浮点型double8 字节+/-1.8E+308 (15 个有效位)
字符型char2 字节ISO 单一字符集
布尔型boolean1 字节true 或 false

2.运算

:::info
可以做运算的基本数据类型有7种,不包含boolean类型
:::

运算规则包括

  • 自动类型提升
  • 强制类型转换
    :::info
    规则:
    当容量小的变量与容量大的变量做运算时,结果自动转换为容量大的数据类型
    byte–>short–>int–>long–>float–>double
    特别的:
    byte和byte、byte和short、short和short、char和int、char和short做运算,结 果都必须是int类型
    规定:
    整型常量,规定是int类型
    浮点型常量,规定是double类型
    :::

2.1 自动类型提升

class VariableTest{
    public static void main(String[] args){
        // int转long
        int i1 = 10;
        long l1 = i1;
    	// long转float
        float f1 = l1;
        // byte+int
        byte b1 = 12;
        int i2 = b1 + i1;
        
        // 编译不通过-错误:从int转换到byte可能会有损失
        byte b2 = b1 + i1;

        // 特殊的***************************************
        // 特殊情况1
        byte b3 = 12;
        short s1 = 10;
        // 编译不通过-错误:从int转换到byte可能会有损失
        //short s2 = b3 + s1;
        int i3 = b3 + s1;

        byte b4 = 10;
        // 编译不通过-错误:从int转换到byte可能会有损失
        //byte b5 = b3 + b4;
        int i4 = b3 + b4;

        // 特殊情况2
        char c1 = 'a';
        // 编译不通过
        //char c2 = c1 + b3;
        int i5 = c1 + b3;
    }
}
class VariableTest{
    public static void main(String[] args){
        long l1 = 123L;
        long l2 = 123; // 理解为:自动类型提升(int-->long)

        long l3 = 123123123123; // 报错:过大的整数 超出了int类型范围
        long l4 = 123123123123L;

        float f1 = 12.3F;
        float f2 = 12.3; // 报错 会认为是double
    }

2.2 强制换转 (xxx)

3.String类型

3.1 String与基本数据类型变量间的运算

:::info

  1. String与基本数据类型变量间只能做连接运算,使用"+"表示。
  2. 运算的结果是String类型
  3. 只要开头是String类型,都能做连接运算
    :::
class VariableTest{
    public static void main(String[] args){
        boolean b1 = true;
        int num1 = 12;
        String str1 = "hello";
        
        // b1 + num1 boolean不能和int类型做连接运算
        // 只有String跟除Boolean类型才做连接运算
        String str2 = b1 + num1 + str1; // 编译不通过
    }

3.2 如何将String类型的变量转换为基本数据类型

class VariableTest{
    public static void main(String[] args){
        String str1 = "10 ";
        int num1 = Integer.parseInt(str1);// 10
    }

4.运算符

分类运算符
算术运算符(7)+、-、*、/、%、++、–
赋值运算符(12)=、+=、-=、*=、/=、%=、>>=、<<=、>>>=、&=、|=、^=
比较运算符(6)>、>=、<、<=、==、!=
逻辑运算符(6)&、|、^、!、&&、||
位运算符(7)&、|、^、~、<<、>>、>>>
条件运算符(条件表达式)?结果1:结果2
Lambda运算符->(第18章)

:::info
++、-- 运算符不会改变数据类型 (不会自动提升)
:::

4.1 位运算符的使用

运算符运算范例
<<左移3<<2 = 12 [322=12]
>>右移3>>1 = 1 [3/2 = 1]
>>>无符号右移3>>>1 = 1 [3/2 = 1]
&与运算6 & 3 = 2
|或运算6 | 3 = 7
^异或运算6 ^ 3 = 5
~取反运算~6 = -7

:::info
<<运算符:对于正数负数都一样
num = 7;
num << 1 = 14;
num << 2 = 28;
num << 3 = 56; [7* 2^1 * 2^2 * 2^3]
>>运算符:对于正数负数都一样
[7/ (2^1) / (2^2) / (2^3)]
:::

企业真题

高效的方式计算2 * 8的值

:::info
2 << 3
:::

&和&&的区别

:::info
&和&&的区别
&和&&都是逻辑运算符号,但&&又叫短路运算符。
因为当第一个表达式的值为false的时候,则不会再计算第二个表达式;
而&则不管第一个表达式是否为真都会执行两个表达式。
另外&还可以用作位运算符,当&两边的表达式不是Boolean类型的时候,&表示 按位操作
:::

Java中计算金额时使用什么数据类型

:::info
不能使用float或double
使用BigDecimal类替换,可以实现任意精度的数据的计算
:::

代码分析

short s1 = 1;
s1 = s1 + 1// =右边是int类型,需要强转

short s2 = 1;
s2 += 1; // 没错

int i = 0; i = i++; i变量的值为

:::info
0;
:::

boolean占几个字节

:::info
编译时不谈占几个字节

JVM在给boolean类型分配内存空间时,boolean类型的变量占据一个槽位(slot,等于4个字节)。

在内存中:
byte/short/char/boolean/int/float:占用1个slot
double/long:占用2个slot
:::

为什么Java中0.1+0.2结果不是0.3

:::info
小数并不能做到每个小数都有对应的二进制数字
:::

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值