Loading... # 常量和变量 ## 常量 - 字面量常量 / 直接量 - `final` 定义的变量 ### 直接量的类型 - int 类型的直接量二进制(以 0B 或 0b 开头)、八进制(以 0 开头)、十进制、十六进制(以 0x 或 0X 开头),如 123、012(对应十进制的 10)、0x12(对应十进制的 18) - long 类型的直接量:在整型数值后添加 l 或 L,如 3L、0x12L - float 类型的直接量:在一个浮点数后添加 f 或 F,如 5.34F、3.14E5f - double 类型的直接量:标准小数形式或者科学计数法形式的浮点数,如 5.34、3.14E5 - boolean 类型的直接量:只有 true 和 false - char 类型的直接量:单引号括起来的字符、转义字符和 Unicode 值表示的字符,如 'a'、'\n' 和 '\u0061' - String 类型的直接量:用双引号括起来的字符序列 - null 类型的直接量:只有一个值,即 null,可以赋给任何引用类型的变量,用以表示这个**引用类型变量中保存的地址为空**,即还未指向任何有效对象 ## 变量 - 定义格式 ```java // 数据类型 变量名 = 初始化值; (声明、赋值) int num1 = 123; ``` - 使用注意 - **同一作用域内**同一变量不可重复声明 - 变量**必须初始化后才能使用**(即必须有值才能使用),否则编译报错 - 变量的值可在同一类型不断变化 - 变量命名符合标识符规范,使用驼峰命名法,`首字母小写` - 就近原则 ### 变量的分类及作用域 [ ![变量分类](https://static.sitestack.cn/projects/sdky-java-note/aa0422a30107384abbe4ac7218e09c09.png) ](https://sdky.gitee.io/img/变量分类.png) [ ![不同数据类型的成员变量的初始值](https://static.sitestack.cn/projects/sdky-java-note/7d2f3a4656d8a50812bd55dcb2741c5c.png) ](https://sdky.gitee.io/img/不同数据类型的成员变量的初始值.png) - 成员变量/全局变量/字段:**直接**定义在**类中**,**方法外**的变量 - 类变量 使用 static 修饰的字段 **方法区** - 实例变量 没有使用 static 修饰的字段 **堆** - 默认是有初始值的,可以先在方法中使用后定义 - 作用域是整个类 - 局部变量 - 方法的形参;2. 方法内中的变量;3.代码块中的变量 - 没有初始值,必须显式初始化后才能使用 - 定义局部变量后,系统并未分配内存空间,直到程序为这个变量**赋值**时,系统才会在**所在方法的的栈内存**中为局部变量分配内存,并将初始值(基本类型的值或者对象的引用)保存在该内存中 - 从 **定义的位置** 开始到所在结束的花括号 # 数据类型的分类 [ ![数据类型分类](https://static.sitestack.cn/projects/sdky-java-note/0e022c80dfbbd9c647889474658477c2.png) ](https://sdky.gitee.io/img/Java数据类型.png) [ ![基本数据类型范围](https://static.sitestack.cn/projects/sdky-java-note/bb49b135af69eb91a992cad3c14fbb07.png) ](https://sdky.gitee.io/img/Java基本数据类型范围.png) <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="614px" height="738px" viewBox="-0.5 -0.5 614 738" content="<mxfile host="www.iodraw.com" modified="2022-08-03T02:36:19.029Z" agent="5.0 (Windows)" etag="zx-EqunuryGoQKOHrnZF" version="13.3.6" type="device"><diagram id="oA7CcLH3hVZHJV-Pgiqu" name="第 1 页">7ZpLk6M2EMc/jY6h9H4cje3ZzSG5TFKpyiXFGNkmi5HD4PVMPn1aIGwYmMfuBs9WeTlMiZZ4TP/+3WoJIzbfPXwok/32F5faHFGcPiC2QJQaRuGvNzw2BklZY9iUWdqYyNlwm/1rgxEH6yFL7X1vYOVcXmX7vnHlisKuqp4tKUt37A9bu7z/1H2ysQPD7SrJh9Y/srTaBivB+Nzx0Wabbfto1fbsknZ0MNxvk9QdOya2RGxeOlc1rd3D3Obeea1jmutunuk9vVlpi+otF/z2e/J3vPr1zyOXsVn9XG0+/MV+Yqq5zeckP4R/Obxt9dj6YFO6wx6xOE/ubB4nq0/eUKRzl7uyHsFu6gOGrLM879jX9QH28BBbVvZhjFty1z4MD/8tcnIWqMy6na3KRxjycPJ4c0lQGKEmUroxHc/IONYR0VoajQnWounfdshxgyPOlZKEGI6pMUFEQUCb04PPLoZG8PIXeJy87nBQyt43V4cyf4xL8LiFl4yP26yyt/tk5fuOEG5g21Y7ePqCQLOGYtNwdt+EEo6koUxiI7DmlCkqXqLR9foLcnmeheyzMCSiwnSOARZKI8GHMJjmQGsiAmyEgMy9h9PsMzQ3vomWApkbFM/QUiIzR7N53RAoxr6hF2i2REuFYoLiZvAS6bi9EbxX915PAYPfqz68JM82BbRzu/Y9nk0GWWgWzLssTf3FcWkBbIgWDOd7lxVV7SARI7HwdzpULsD3N167ogpptWZfn4c3IS8G9evB+9VyCfKgkkWMa4q1EcJDVwN9nKK7F6p4ImWIoTICdN6hP4T+Zrwr8JctpwIMEfMU8GSRrnSkseKMQlLFUmDeC3wlIyq1FFIRyYkydADWjHBlU3GVI1wFmi2QUR4nxPZM/uD6Bq4U86gbryMZ/aJgR6oXiNNYhOSsKYrND7BvAMsYiVqqGgszzMQX5apHAzbWSLO6gZHh3xvX0lVJlbkijP8uMXM5WuS+F+Z2lfeexXCXy1Nu7PkCqXCFnbKU9rURACRQHkHCNUr2QZrImBaiFlixYeXEI8+ZYWK0IQITMgRLJJTfTDHCQDCaCU2nAj2suTVach/Rs1lnLoYAn/mszWZtJe1x1OvEti6V/xxcU1QzDAcsOzumpt7OXbHpVOLNLb64FJ849ctJ1aNFZBTUYZprggmVqqee57gfe1scQ73QyRLBMOHz6fSR1Xq4ZnkYWHhJDPSFxlxhIvvywCrqFO+knURemSYmUwcdThN0OnXcb1159fqAMgELQpTgWGpFe/IQPOpIg49stl02ebRFQ0ceZDp53D1W9srVofVo9ng/AQxnjwnzw2qblFcuAFhkCKigCWOaCFg09tIDVKuv7RFcWB7m/VcZE7Lob7kzIqOxeIzwyDcPWGO0u+///y778EPHhCV/6g4+Uq47LHX3Exdv464VhuQR7VT8ZCgSesmobL8MX6bkX+cuufaiTrOX5AFZWwgDszk3FNaG770iZMMdg6aoW/hvb99YwjmX26S4cjm8OIlzKV7ZKDz9BOIb5QCn599A1H2dX5Kw5X8=</diagram></mxfile>"><defs></defs><g><rect x="0" y="-0.33" width="612.28" height="735.67" fill="#ffffff" stroke="none" pointer-events="all"></rect><path d="M 273.81 136.56 L 268.61 136.56 Q 263.41 136.56 263.41 151.56 L 263.41 409.69 Q 263.41 424.69 251.7 424.69 L 245.85 424.69 Q 240 424.69 251.7 424.69 L 257.56 424.69 Q 263.41 424.69 263.41 439.69 L 263.41 697.83 Q 263.41 712.83 268.61 712.83 L 273.81 712.83" fill="none" stroke="#000000" stroke-width="1.5" stroke-miterlimit="10" pointer-events="all"></path><rect x="0" y="394.69" width="255" height="60" fill="none" stroke="none" pointer-events="all"></rect><g transform="translate(-0.5 -0.5)scale(1.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 283px; margin-left: 2px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 25px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; background-color: #ffffff; white-space: nowrap; "><div>基本数据类型</div></div></div></div></foreignObject><text x="2" y="291" fill="#000000" font-family="Helvetica" font-size="25px" font-weight="bold">基本数据类型</text></switch></g><rect x="268.21" y="114.07" width="135" height="45" fill="none" stroke="none" pointer-events="all"></rect><g transform="translate(-0.5 -0.5)scale(1.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 91px; margin-left: 224px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: nowrap; ">整数类型</div></div></div></foreignObject><text x="224" y="96" fill="#000000" font-family="Helvetica" font-size="18px" text-anchor="middle" font-weight="bold">整数类型</text></switch></g><rect x="268.21" y="306.9" width="135" height="45" fill="none" stroke="none" pointer-events="all"></rect><g transform="translate(-0.5 -0.5)scale(1.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 220px; margin-left: 224px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: nowrap; ">字符类型</div></div></div></foreignObject><text x="224" y="225" fill="#000000" font-family="Helvetica" font-size="18px" text-anchor="middle" font-weight="bold">字符类型</text></switch></g><rect x="268.21" y="497.51" width="135" height="45" fill="none" stroke="none" pointer-events="all"></rect><g transform="translate(-0.5 -0.5)scale(1.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 347px; margin-left: 224px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: nowrap; ">浮点类型</div></div></div></foreignObject><text x="224" y="352" fill="#000000" font-family="Helvetica" font-size="18px" text-anchor="middle" font-weight="bold">浮点类型</text></switch></g><rect x="268.21" y="690.34" width="135" height="45" fill="none" stroke="none" pointer-events="all"></rect><g transform="translate(-0.5 -0.5)scale(1.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 475px; margin-left: 224px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: nowrap; ">布尔类型</div></div></div></foreignObject><text x="224" y="481" fill="#000000" font-family="Helvetica" font-size="18px" text-anchor="middle" font-weight="bold">布尔类型</text></switch></g><path d="M 417.87 14.66 L 414.46 14.66 Q 411.05 14.66 411.05 29.66 L 411.05 121.57 Q 411.05 136.57 403.38 136.57 L 399.55 136.57 Q 395.71 136.57 403.38 136.57 L 407.22 136.57 Q 411.05 136.57 411.05 151.57 L 411.05 243.47 Q 411.05 258.47 414.46 258.47 L 417.87 258.47" fill="none" stroke="#000000" stroke-width="1.5" stroke-miterlimit="10" pointer-events="all"></path><rect x="428.96" y="243.48" width="165" height="30" fill="none" stroke="none" pointer-events="all"></rect><g transform="translate(-0.5 -0.5)scale(1.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 172px; margin-left: 341px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">8个字节:<font color="#0000FF">long</font></div></div></div></foreignObject><text x="341" y="177" fill="#000000" font-family="Helvetica" font-size="16px" text-anchor="middle">8个字节:long</text></switch></g><rect x="440.04" y="161.47" width="135" height="30" fill="none" stroke="none" pointer-events="all"></rect><g transform="translate(-0.5 -0.5)scale(1.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 118px; margin-left: 338px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">4个字节:<font color="#0000FF">int</font></div></div></div></foreignObject><text x="338" y="122" fill="#000000" font-family="Helvetica" font-size="16px" text-anchor="middle">4个字节:int</text></switch></g><rect x="435.61" y="81.68" width="165" height="30" fill="none" stroke="none" pointer-events="all"></rect><g transform="translate(-0.5 -0.5)scale(1.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 64px; margin-left: 345px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">2个字节:<font color="#0000FF">short</font></div></div></div></foreignObject><text x="345" y="69" fill="#000000" font-family="Helvetica" font-size="16px" text-anchor="middle">2个字节:short</text></switch></g><rect x="432.54" y="-0.33" width="165" height="30" fill="none" stroke="none" pointer-events="all"></rect><g transform="translate(-0.5 -0.5)scale(1.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 10px; margin-left: 343px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">1个字节:<font color="#0000FF">byte</font></div></div></div></foreignObject><text x="343" y="15" fill="#000000" font-family="Helvetica" font-size="16px" text-anchor="middle">1个字节:byte</text></switch></g><rect x="417.88" y="314.4" width="165" height="30" fill="none" stroke="none" pointer-events="all"></rect><g transform="translate(-0.5 -0.5)scale(1.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 220px; margin-left: 334px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">2个字节:<font color="#0000FF">char</font></div></div></div></foreignObject><text x="334" y="224" fill="#000000" font-family="Helvetica" font-size="16px" text-anchor="middle">2个字节:char</text></switch></g><path d="M 421.58 474.57 L 419.03 474.57 Q 416.48 474.57 416.48 489.57 L 416.48 507.23 Q 416.48 522.23 410.74 522.23 L 407.87 522.23 Q 405 522.23 410.74 522.23 L 413.61 522.23 Q 416.48 522.23 416.48 537.23 L 416.48 554.88 Q 416.48 569.88 419.03 569.88 L 421.58 569.88" fill="none" stroke="#000000" stroke-width="1.5" stroke-miterlimit="10" pointer-events="all"></path><rect x="432.28" y="546.02" width="180" height="30" fill="none" stroke="none" pointer-events="all"></rect><g transform="translate(-0.5 -0.5)scale(1.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 374px; margin-left: 348px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">8个字节:<font color="#0000FF">double</font></div></div></div></foreignObject><text x="348" y="379" fill="#000000" font-family="Helvetica" font-size="16px" text-anchor="middle">8个字节:double</text></switch></g><rect x="424.78" y="464.01" width="165" height="30" fill="none" stroke="none" pointer-events="all"></rect><g transform="translate(-0.5 -0.5)scale(1.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 319px; margin-left: 338px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">4个字节:<font color="#0000FF">float</font></div></div></div></foreignObject><text x="338" y="324" fill="#000000" font-family="Helvetica" font-size="16px" text-anchor="middle">4个字节:float</text></switch></g><rect x="417.88" y="697.84" width="150" height="30" fill="none" stroke="none" pointer-events="all"></rect><g transform="translate(-0.5 -0.5)scale(1.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 475px; margin-left: 329px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">1位:<font color="#0000FF">boolean</font></div></div></div></foreignObject><text x="329" y="480" fill="#000000" font-family="Helvetica" font-size="16px" text-anchor="middle">1位:boolean</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"></g><a transform="translate(0,-5)" xlink:href="https://desk.iodraw.com/support/solutions/articles/16000042487" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg> ## boolean 类型 - 常量值只能是 true 或 false ```java boolean isMan = true; ``` ## 整数类型 - byte, short, int, long - 二进制(补码) 以 0B 或 0b 开头,0B0110 - 八进制 以 0 开头,056 - 十进制 17 - 十六进制 以 0X 或 0x 开头,0XFF ```java int i = 110; // 整数常量默认是 int 类型 long l = 110L; // long 类型常量需在整数后添加 l 或 L 后缀 long l = 110; // 可以把一个较小的整数值(在 int 类型的表数范围以内)直接赋给一个 long 类型的变量(自动类型转换) ``` ## 浮点数类型 - float, double ```java double pi = 3.14; // 浮点数常量默认是 double 类型 float pi = 3.14F; // float 类型常量需在浮点数后添加 f 或 F 后缀 float pi = 3.14; // 错误: 不兼容的类型: 从 double 转换到 float 可能会有损失 3.14 == 3.14F; // false 3.14 == 3.14D; // true float a = 1.0f - 0.9f; float b = 0.9f - 0.8f; a == b; // false ``` - 注意:浮点数采用“尾数+阶码”的编码方式,所以 float, double 都**不能表示精确的浮点数**,需用 BigDecimal 类型 ## 字符类型 - char 16 位 Unicode 字符集,编码方式为 UTF-16BE - UTF-16 使用 2 或者 4 字节表示一个字符,在 65536 以内的占两个字节,而基本上所有汉字的 Unicode 编码在 `19968 到 40869 之间`,所以一个 char 类型可以存储一个汉字 - 使用`' '`括起来 - 49'1'; 65 'A'; 97 'a' ```java // 表示形式 char c1 = 'A'; // 使用单个字符 char c2 = 65; // 使用十进制的整数(Unicode 值),[0, 65535] char c3 = '\u0061'; // 使用十六进制的整数,格式'\uXXXX',('\u0000'~'\u00FF') ``` ## 最常用的引用类型 String - 字符串常量使用`""`引起来的,连接字符串使用 “+” 符号 - 字符串拼接:字符串可以和**任何基本类型的值或 Java 对象**进行连接运算,结果都是**字符串类型**(基本类型的值将自动类型转换为字符串类型,系统自动调用 Java 对象 toString() 方法) # 基本类型的类型转换 图 6 基本数据类型转换 - boolean 不属于数值类型,不参与转换 ## 自动类型转换 / 隐式类型转换 - 如果直接将一个**较小的整数常量**(在 byte 或 short 类型的表数范围内)赋给一个 byte 或 short 变量,系统会自动把这个整型常量当成 byte 或 short 类型来处理 ## 强制类型转换 - 语法格式:(targetType)value ```java byte b2 = 65; // 系统会自动把 65 当成 byte 类型处理 int a = 12; byte b = (byte) a; // 强制类型转换 float a = (float) 5.6; // 强制类型转换 int i = (int) -12.81; // 强制类型转换(小数部分被截掉),i = -12 (char) 65 // 表示 'A' 字符 ``` ## 表达式类型的自动提升 - 所有的 `byte`、`short`、`char` 类型被自动提升到 `int` 类型 - 整个算术表达式最终结果的数据类型被提升到**表达式中操作数类型最高的类型** ```java short s = 5; // 自动类型转换(隐式类型转换) s = s - 2; // 错误: 不兼容的类型: 从int转换到short可能会有损失 ``` # 运算符 ## 算术运算符 ### 加号 + - 加号在操作数值、`字符`、字符串时,其结果是不同的 - 当两个**字符**相加得到的是 **ASCII 码表值** - 作为**字符串连接运算符** ### 除号 / - 如果除法运算符的两个操作数都是整数类型,则计算结果也是**整数**(截断小数部分取整),此时除数不能是 0,否则将引发**除以零异常** ArithmeticException: / by zero - 如果除法运算符的两个操作数有 1 个是浮点数,或者 2 个都是浮点数,则计算结果也是浮点数,此时允许除数是 0,或者 0.0,得到结果是正无穷大或负无穷大 ### 取模(求余数)% - 被模数 % 模数 - 模数的符号忽略不计,结果的正负取决于**被模数** - 如果求余运算的两个操作数都是整数类型,则求余运算的第二个运算数不能是 0,否则将引发**除以零异常** ```java 'A' + 'B' // 131 "A" + "B" // AB 10 / 3 // 3 System.out.println(10 / 0) // ArithmeticException: / by zero System.out.println(10.0 / 0) // 输出正无穷大:Infinity System.out.println(-10.0 / 0) // 输出负无穷大:-Infinity System.out.println(0 / 0.0) // 输出非数(Not a Number):NaN /* 注意: 无穷大和 NaN 都属于 double 浮点类型 但是所有正无穷大数值都是相等的,所有负无穷大数值也是相等的 NaN 不与任何数值相等,也不等于自己 */ ``` ### 自增 ++ 自减 — - 自增、自减操作都是直接修改变量的值(读、改、写),不经过操作数栈 - 前置 ( ++i ):**局部变量表**中的 i 先自增,再把 i 的值压入**操作数栈** - 后置 ( i++ ):先把局部变量表中的 i 压入操作数栈,再自增 ```java int i = 1; i = ++i; System.out.println(i); // 2 int j = 1; j = j++; System.out.println(j); // 1 ``` ## 赋值运算符 - += 隐式的将加操作的结果类型强制转换为持有结果的类型 ```java byte a = 127; byte b = 127; b = a + b; // error : cannot convert from int to byte b += a; // ok short s = 5; s += 5; // s = (short)(s + 5) ``` ## 比较运算符 - 比较运算符的结果是 boolean 类型 - == != < > <= >= instanceof - 使用 == 判断两个两个变量是否相等 - 基本类型变量:只要两个变量的**值相等**( 不一定要求数据类型严格相同),就返回 true - 引用类型变量:只有两个变量**指向同一个对象**时,返回 true(不可用于比较类型上没有**继承关系**的两个对象,否则编译报错) ```java 97 == 'a'; // true 5.0 == 5; // true "hello" == new Animal(); // 编译报错 ``` ## 三元运算符 / 三目运算符 - boolean 表达式 ? 表达式 1 : 表达式 2 ```java // 判断奇数偶数 String ret = number % 2 == 0 ? "偶数" : "奇数"; ``` ## 逻辑运算符 - 用于操作两个 boolean 类型的变量或常量,结果也是 boolean 类型 - & :与,**都为 true**,结果才为 true,否则结果是 false - && :短路与,如果左边的操作数是 false,结果一定为 false,且不再计算右边的操作数 - | :或,**都为 false**,结果才为 false,只要有一个是 true,结果就是 true - || :短路或,如果左边的操作数是 true,结果一定为 true,且不再计算右边的操作数 - ^ :异或,判断两个操作数是否**不同**,不同则为 true,相同则为 false - ! :取反,!true 结果是 false,!fasle 结果是 true ## 位运算符 - 操作的是**数**的**补码**的二进制位 - 位运算符只能操作**整数类型**的变量或值 - & :按位与,当两位同时为 1 时才返回 1 - | :按位或,只要有一位为 1 即可返回 1 - ~ :按位非,单目运算符,将操作数的每个位(包括符号位)全部取反 - ^ :按位异或,当两位相同时返回 0,不同时返回 1 - << :左移运算符 - \>> :右移运算符 - \>>>:无符号右移运算符 ```java // 左移 n 位相当于乘以 2 的 n 次方 // 右移 n 位相当于除以 2 的 n 次方 4 >> 1; // 效率高的除以 2,等价于 4 / 2 1 << 10; // 等于 2 的 10 次方 ``` ```JAVA // 交换两个变量的值 int a = 10; int b = 12; // 第一种方法,使用临时变量 int temp = a; a = b; b = temp; // 第二种方法 // 把 a、b 看做数轴上的点,围绕两点间的距离来进行计算(可能会越界) a = b - a; b = b - a; a = b + a; // 第三种方法 // 任意一个数与任意一个给定的值连续异或两次,值不变 a = a ^ b; b = a ^ b; a = a ^ b; ``` # 表达式 - 表达式不是完整的语句! 最后修改:2022 年 08 月 03 日 © 允许规范转载 打赏 赞赏作者 赞 如果觉得我的文章对你有用,请随意赞赏