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

黑马Java基础笔记-3

短路逻辑运算符与逻辑运算符

逻辑运算符

符号作用说明
&逻辑与(且)并且,两边都为真,结果才是真
|逻辑或或者,两边都为假,结果才是假
^逻辑异或相同为 false,不同为 true
!逻辑非取反

短路逻辑运算符(原来还有这个)

符号作用说明
&&短路与结果和 & 相同,但是有短路效果
||短路或结果和 | 相同,但是有短路效果

相比与逻辑运算符他在执行第一个条件判断如果通过就不会执行后续的判断,可以优化性能


switch新特性

int number = 1;
switch(number){case 1:System.out.println("一”);             break;case 2:System.out.println("二");break;
case 3:system.out.println("number的值为2);break;
default :system.out.println("number的值不是1,10或者20);// break;}

可以将原样式修改成如下格式来简化书写break;不会造成case穿透

int number = 1;
switch (number) {case 1 -> System.out.println("一");//当执行逻辑只有一行的时候可以省略大括号case 2 -> {System.out.println("二");//这样可以简化书写break}case 3 -> System.out.println("三");default -> System.out.println("没有这种选项");
}

无限循环

// 1. for 循环
for (;;) {System.out.println("学习");
}
// 2. while 循环
while (true) {System.out.println("学习");
}
// 3. do-while 循环
do {System.out.println("学习");
} while (true);

数组

静态初始化

完整格式

int[] arr = new int[]{1,2,3,4}

简化格式

int[] arr = {1,2,3,4}

动态初始化

 int[] arr = new int[3];

初始化时只指定数组长度,由系统为数组分配初始值

整数类型:默认初始化值0
小数类型:默认初始化值0.0
字符类型:默认初始化值’/u0000’空格
布尔类型:默认初始化值false
引用数据类型:默认初始化值null

地址值

doub1e[]arr6={1.93,1.75,1.73,1.81};
system.out.println(arr6);//[D@776ec8df

地址值
扩展:解释一下地址值的格式含义
[D@776ec8df
[ : 表示当前是一个数组
D : 表示当前数组里面的元素都是double类型的
@ : 表示一个间隔符号。(固定格式)
776ec8df : 才是数组真正的地址值,(十六进制)
平时我们习惯性的会把这个整体叫做数组的地址值。


java内存分配

java7及以下内存分配
在这里插入图片描述
java8及以上内存分配
在这里插入图片描述


  • 方法运行时使用的内存,比如 main 方法运行时进入方法栈中执行。

  • 存储对象或者数组,用 new 创建的对象都存储在堆内存。
  • 方法区
    存储可运行的 class 文件。
  • 本地方法栈
    VM 在使用操作系统功能时使用,与我们开发无关。
  • 寄存器
    给 CPU 使用,与我们开发无关。

栈和堆概览

在这里插入图片描述
1. 只要是new出来的一定是在堆里面开辟了一个小空间
2. 如果new了多次,那么在堆里面有多个小空间,每个小空间中都有各自的数据

数组的内存图

普通的变量存储的真是的数据

在这里插入图片描述

而数组记录的是一个地址值:
在这里插入图片描述

*sout(arr)*打印出来是就是这个数组存在堆内存的地址值

通过数组的索引可以获取到这个数组索引位置的具体值

这两者可以囊括为基本数据类型和引用数据类型
在这里插入图片描述### 总结

  1. 普通变量(如 int i = 10;)存储的是实际数据值
    • 对于 Java 的基本数据类型(int、double、boolean 等),变量本身就是存储在栈中的“值”。
  2. 数组(以及其他对象)在栈中存储的是引用(Reference),对象本身存储在堆中
    • int[] arr = new int[2]; 中的 arr 是一个引用,指向实际的数组对象,这个数组对象分配在堆中。
    • 当我们 sout(arr) 时,打印的是对象的“类型+哈希值”形式(类似 [I@1b6d3586),它并不是真正的物理内存地址,但可以理解为“引用的字符串形式”。
  3. 通过 arr[索引] 可以获取到堆中数组对象某个索引位置的真实数据
    • 也就是说,arr 本身不直接存放数组内容,它只是一个指针/引用,真正的数据放在堆中的数组对象里。

需要注意的几点补充

  • Java 中打印的并不是真实物理地址
    Java 层面并不会直接暴露物理地址,而是通过对象的哈希值、类型信息等拼接而成的字符串,这只是为了区分不同对象的“标识符”,并不代表内存的真实位置。
  • 引用是语言层面的概念
    虽然我们常说“在栈里存的是对象的地址”,但更准确地说,这个“地址”是 Java 虚拟机给对象分配的引用(Reference),并不等同于指针在底层的实际内存地址。
  • 基本数据类型 VS 引用类型
    • 基本数据类型(int, double, boolean 等)变量里直接存储值本身。
    • 引用类型(数组, String, 以及自定义类的对象等)变量里存储的是引用,实际对象放在堆内存。

两个数组指向同一个内存地址

在这里插入图片描述

int [] arr2 = arr1;
http://www.xdnf.cn/news/1379.html

相关文章:

  • 提高Spring Boot开发效率的实践
  • 算法题-图论
  • Linux进程状态及转换关系
  • webrtc建立连接的过程
  • UML 顺序图:电子图书馆管理系统的交互之道
  • RocketMQ 核心架构速览
  • 45、子类需要重写父类的构造函数嘛,子类自己的构造函数呢?
  • Git技术详解:从核心原理到实际应用
  • 示波器探头干扰致晶振停振的机理与工程对策
  • 三星One UI安全漏洞:剪贴板数据明文存储且永不过期
  • CSS清楚默认样式
  • APK安装失败,提示-13的错误
  • 解耦旧系统的利器:Java 中的适配器模式(Adapter Pattern)实战解析
  • CSS 选择器介绍
  • 【Java学习笔记】random的使用
  • 软件测试之功能测试详解
  • 从零到精通:探索GoFrame框架中gcron的定时任务之道 —— 优势、实践与踩坑经验
  • STM32F103 单片机(基于 ARM Cortex-M3 内核)的启动过程涉及硬件初始化、固件配置和程序执行流程。
  • 【计算机视觉】CV项目实战- Florence-SAM 多模态视觉目标检测+图像分割
  • Java_day30-35
  • 5.2.3 WPF 中 XAML 文件 Converter 使用介绍
  • 私有知识库 Coco AI 实战(三):摄入 Elasticsearch 官方文档
  • 安装jdk报错2503、2502--右键msi文件没法管理员权限执行(Windows解决方案)
  • 栈和队列学习记录
  • 图聚类中的亲和力传播
  • 国产三维CAD皇冠CAD在机械及汽车零部件设计建模教程:斜滑动轴承
  • Python内置函数---bin()
  • 书籍推荐:《认知觉醒》一周岭
  • 单片机获取真实时间的实现方法
  • Windows 各版本查找计算机 IP 地址指南