当前位置: 首页 > news >正文

Java基础概念

一、注释

  • 单行注释 //注释信息
  • 多行注释 /*注释信息*/
  • 文档注释 /**注释信息*/

二、关键字

关键字:被Java赋予了特定含义的英文单词

  1. 关键字的字母全部小写
  2. 关键字有特殊的颜色标记

三、字面量

字面量:数据在程序中的书写格式

字面量类型整数类型int小数类型double字符串类型String字符类型char布尔类型boolean空类型null

变量:表示内存中的一个存储区域(不同的变量,类型不同,占用空间大小不同)。变量必须先声明,后使用

  • byte - 1字节
  • short - 2字节
  • int - 4字节
  • double - 8字节

四、数据类型

每一种数据都定义了明确的数据类型,在内存中指定了

  • 基本数据类型
  1. 整数型:整数类型(byte[1], short[2], int[4], long[8])、浮点类型(float[4], double[8])
  2. 字符型(char[2]):存放单个字符
  3. 布尔型(boolean[1]):存放true,flase
  • 引用数据类型
  1. 类(class)
  2. 接口(interface)
  3. 数组([])

五、细节

  • 声明double:double num = 1.1;
  • 声明float:float num = 1.1f;float num = 1.1F;
  • double num1 = 2.7; double num2 = 8.1/3; num2<num1
  • 小数的比较大小,应当以两个数的差值的绝对值在某个精度范围内判断
  • 字符(ASCII码)

六、数据类型转换

1.自动类型转换

自动类型转换:精度小的类型自动转换为精度大的数据类型。

  • 精度大小排序:
  1. char -> int -> long -> double
  2. byte -> short -> int -> long -> float -> double
  • 例如:int a = ‘c’; 或 double d = 80; // 这俩是对的定义
  • 例如:int b = 18.0; //错误定义
  • String字符串不是基本类型
  • 当有多种数据类型的数据混合运算时,系统首先会将所有数据转换成运算数据里精度最大的数据类型,然后再进行计算
public class AutoConvertDetail {
    public static void main(String[] args) {
        int i = 10;
        float f1 = i + 1.1; // 错误定义,f1应是double型
        double d1 = i + 1.1; // 正确定义
        float f2 = i + 1.1F; // 正确定义,f2是float型
        // byte\short即使是单独进行运算时,系统都会将其转换为int型
        byte b1 = 10; // 正确定义,byte范围为-128~127,而定义byte类型的数据时,系统会先判断该数是否在byte范围内
        byte b2 = i; // 错误定义,因为i是int型,而int是无法转换为byte型
        short s1 = 1;
        short s2 = b1 + s1; // 错误定义,此时的s2应是int型
        byte b3 = 1;
        byte b4 = b1 + b3; // 错误定义,b4应是int型
    }
}

2.强制类型转换

强制类型转换:自动类型转换的逆过程。将精度大的数据类型转换为精度小的数据类型,但此操作可能造成精度降低或溢出。

public class ForceConvert {
    public static void main(String[] args) {
        int i = (int)1.9; // i = 1  造成精度损失
        byte b = (byte)2000; // b = -48  造成精度溢出
    }
}

3.String

// String类型转换成double类型
String str1 = "0423";
double d = Double.parseDouble(str);
// char类型转换成String类型
char c = '绪';
String str2 = c + "";

七、进制

  • 二进制:0, 1,以0b或0B开头表示
  • 十进制:0-9
  • 八进制:0-7,以0开头表示
  • 十六进制:0-9及A(10)-F(15),以0x或0X开头表示
int n1 = 0b1010;
int n2 = 1010;
int n3 = 01010;
int n4 = 0x10101;

八、位移

  • >>:算术右移 - 低位溢出,符号位不变,并用符号位补溢出的高位
  • <<:算术左移 - 符号位不变,低位补0
  • >>>:逻辑右移(无符号右移) - 低位溢出,高位补0
  • <<<:没有这个符号
  • ~:按位 取反
  • &:按位 与
  • |:按位 或
  • ^:按位 异或

* 九、原码/反码/补码

二进制的最高位是符号位:0-正数,1-负数

  • 正数的原码/反码/补码均一样
  • 负数的反码 = 其原码符号位不变,其余位取反 = 其补码 - 1
  • 负数的补码 = 其反码 + 1
  • 0的反码/补码都是0
  • java没有无符号数,即java中的数都是有符号的

在计算机运算时,都是以【补码】的方式来运算的,看运算结果时,都是看【原码】。

 2的原码:00000000 00000000 00000000 00000010
 2的补码:00000000 00000000 00000000 00000010
-2的原码:10000000 00000000 00000000 00000010
-2的原码:11111111 11111111 11111111 11111101
-2的补码:11111111 11111111 11111111 11111110
 3的原码:00000000 00000000 00000000 00000011
 3的补码:00000000 00000000 00000000 00000011
-3的原码:10000000 00000000 00000000 00000011
-3的反码:11111111 11111111 11111111 11111100
-3的补码:11111111 11111111 11111111 11111101
【计算机运算时以“补码”方式来运算】
(1)~-2:-2按位 取反
运算后的补码:00000000 00000000 00000000 00000001
    转为反码:00000000 00000000 00000000 00000001
    原码结果:00000000 00000000 00000000 00000001
结果:1
(2)2&3:2和3按位 与
运算后的补码:00000000 00000000 00000000 00000010
    原码结果:00000000 00000000 00000000 00000010
结果:2
(3)2|3:2和3按位 或
运算后的补码:00000000 00000000 00000000 00000011
    原码结果:00000000 00000000 00000000 00000011
结果:3
(4)-3^3:-3和3按位 异或
运算后的补码:11111111 11111111 11111111 11111110
    转为反码:11111111 11111111 11111111 11111101
    原码结果:10000000 00000000 00000000 00000010
结果:-2
(5)int a = 1 >> 2:1算术右移2位
1的原码/反码/补码:00000000 00000000 00000000 00000001
【算术右移:符号位为0,符号位不变,高位补符号位0】
补码/原码:00000000 00000000 00000000 00000000
结果:0(1/2/2=0)
(6)int b = -1 << 2:1算术左移2位
-1的原码:10000000 00000000 00000000 00000001
-1的反码:11111111 11111111 11111111 11111110
-1的补码:11111111 11111111 11111111 11111111
【算术左移:符号位不变,低位补0】
补码:11111111 11111111 11111111 11111100
反码:11111111 11111111 11111111 11111011
原码:10000000 00000000 00000000 00000100
结果:-4(-1*2*2=-4)
(7)int c = 3 >>> 2:3无符号右移2位
3的原码/反码/补码:00000000 00000000 00000000 00000011
【逻辑右移:低位溢出,高位补0】
补码/原码:00000000 00000000 00000000 00000000
结果:0

以上可以通过System.out.println(3>>>2);进行检查结果。

相关文章:

  • 国产编辑器EverEdit - 上下翻滚不迷路(历史编辑位置、历史光标位置回溯功能)
  • Typora“使用”教程
  • SpringBoot开发——初步了解SpringBoot
  • UE_C++ —— UObject Instance Creation
  • AcWing——1571. 完美序列
  • 无人机航迹规划:互联银行系统优化(Connected Banking System Optimizer,CBSO)求解无人机路径规划MATLAB
  • JavaScript作用域与闭包
  • 数字内容体验优化策略:全渠道整合与高效转化实践
  • NVIDIA Jetson Orin Nano 刷机过程
  • Unity Shader Graph 2D - Procedural程序化图形循环的箭头
  • 《AI大模型开发笔记》deepseek提示词技巧
  • 易语言写NFC标签URI网址NDEF记录
  • 17.企业级知识图谱中的知识库全景解析(基本概念、 5W2H视角知识库、存储格式分类与技术对比、实践路径与架构设计、案例)
  • 分享一个使用的音频裁剪chrome扩展-Ringtone Maker
  • android 源码切换分支
  • 第 15 天:数据存储,打造存档 读取系统!
  • CAD字体 SHX字体下载
  • Lineageos 22.1(Android 15)更换开机动画
  • Python函数进阶250215
  • 百度智能云—千帆 ModelBuilder API的简单调用(Java)
  • 一生要出片的年轻人,买爆相机
  • 巴基斯坦全面恢复领空开放
  • 印巴战火LIVE丨“快速接近战争状态”:印度袭击巴军事基地,巴启动反制军事行动
  • 上海国际电影节推出三大官方推荐单元,精选十部优秀影片
  • 青年与人工智能共未来,上海创新创业青年50人论坛徐汇分论坛举办
  • 心相印回应官方旗舰店客服辱骂消费者:正排查