Java入门——变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
变量和内存紧密联系在一起,主要通过以下方式实现关联:
一、变量的定义与内存分配
变量声明:
当在编程语言中声明一个变量时,编译器或解释器会根据变量的类型在内存中为其分配一块特定大小的空间。
例如,在 C 语言中声明一个整数变量int num;,编译器会在内存中分配足够存储一个整数的空间,通常在 32 位系统中是 4 个字节。
内存区域:
不同类型的变量可能被分配在不同的内存区域。常见的内存区域包括栈(stack)、堆(heap)和静态存储区等。
局部变量通常分配在栈上,当函数执行结束时,栈上的变量会自动释放。而动态分配的内存(如通过malloc或new分配的内存)位于堆上,需要手动释放。全局变量和静态变量则存储在静态存储区,它们的生命周期贯穿整个程序的运行。
二、变量名与内存地址的关联
符号表:
编译器或解释器维护一个符号表,其中存储了变量名和它们对应的内存地址的映射关系。
当程序中使用变量名时,编译器或解释器会通过查找符号表来确定变量在内存中的地址。
例如,在 Python 中,当你使用变量x时,解释器会通过内部的机制找到变量x所对应的内存地址,然后读取或修改该地址中的值。
间接访问:
通过变量名,程序可以间接访问内存中的数据。变量名实际上是一个指向内存地址的符号,而不是直接存储数据的值。
例如,在 Java 中,当你执行int y = x;时,实际上是将变量x所指向的内存地址中的值复制到变量y所对应的内存地址中。
三、变量的操作与内存的变化
赋值操作:
当对变量进行赋值时,新的值会被存储到变量所对应的内存地址中。
例如,在 C++ 中,num = 10;会将整数 10 存储到变量num所对应的内存地址中。
数据修改:
可以通过变量来修改内存中的数据。例如,对一个变量进行递增或递减操作,实际上是修改了该变量所对应的内存地址中的值。
例如,在 C 语言中,num++;会将变量num所对应的内存地址中的值增加 1。
指针变量:
指针变量是一种特殊类型的变量,它存储的是另一个变量的内存地址。通过指针变量,可以直接操作内存中的数据。
例如,在 C 语言中,int* ptr = #声明了一个指针变量ptr,它存储了变量num的内存地址。通过*ptr可以访问和修改变量num的值。
总之,变量和内存通过变量的定义、符号表的映射以及变量的操作紧密联系在一起。变量名作为一种符号,指向内存中的特定地址,程序通过变量名来访问和修改内存中的数据。

———————————————————————————————————————————

在编程语言中,引用数据类型变量和数据通过以下方式建立联系:
一、引用的概念
定义:引用数据类型是指那些在内存中通过引用(或指针)来关联变量和实际数据的类型。与基本数据类型直接存储值不同,引用数据类型存储的是对数据的引用,这个引用指向实际数据在内存中的位置。
例如,在 Java 中,类、接口、数组等都是引用数据类型。在 C++ 中,除了基本数据类型之外的大多数类型,如类、指针等也是引用数据类型。
二、建立联系的过程
变量声明与初始化:
当声明一个引用数据类型的变量时,实际上是在内存中为这个变量分配一块空间,用于存储对实际数据的引用。这个引用初始时可能为 null(在 Java 中)或未初始化的状态(在 C++ 中)。
例如,在 Java 中声明一个字符串变量String str;,此时str为 null,表示它还没有指向任何实际的字符串数据。
在 C++ 中,声明一个指针int* ptr;,此时ptr未初始化,它可能指向任意的内存地址或者为 null。
对象创建与赋值:
要让引用数据类型变量与实际数据建立联系,通常需要创建一个对象,并将变量指向这个对象。
在 Java 中,可以使用new关键字来创建对象,并将变量赋值为对这个对象的引用。例如,str = new String(“Hello”);,现在str指向一个包含字符串 “Hello” 的对象。
在 C++ 中,可以使用new运算符来动态分配内存并创建对象,然后将指针赋值为指向这个对象的地址。例如,int* ptr = new int(10);,现在ptr指向一个存储整数 10 的内存地址。
传递与共享:
由于引用数据类型变量存储的是对数据的引用,当将这样的变量传递给函数或作为参数传递给其他对象时,实际上是传递了对数据的引用,多个变量可以指向同一个对象,从而实现数据的共享和修改。
例如,在 Java 中,将一个对象作为参数传递给方法,方法内部对这个对象的修改会影响到原始的对象,因为它们都指向同一个内存中的数据。
在 C++ 中,将指针作为参数传递给函数,函数可以通过指针修改所指向的内存中的数据,从而影响到调用者的变量所指向的数据。
三、作用与优势
灵活性:引用数据类型允许在不同的部分 of 程序中共享和修改同一份数据,增加了程序的灵活性。可以通过修改一个变量所指向的对象,而影响到其他指向同一对象的变量。
例如,在一个面向对象的程序中,多个对象可以共享同一个数据结构,通过修改这个数据结构,可以影响到所有相关的对象。
动态分配内存:引用数据类型通常与动态内存分配(如在 C++ 中使用new和delete,在 Java 中通过垃圾回收机制自动管理内存)相结合,允许在运行时根据需要分配和释放内存,提高了程序的效率和可扩展性。
例如,在处理大型数据结构或不确定大小的数据时,可以根据实际情况动态地分配内存,而不是在编译时确定固定的内存大小。
总之,引用数据类型变量通过存储对实际数据的引用,在程序中建立了变量和数据之间的联系。这种方式提供了更大的灵活性和动态性,使得程序能够更有效地处理复杂的数据结构和共享数据。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1560227.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

包材推荐中的算法应用|得物技术

目录 一、业务背景 二、算法架构 规则算法 三、算法原理 装箱装袋 四、衍生应用 切箱合包箱型设计包装方案推荐 五、作者结语 一、业务背景 任何一家电商的商品出库场景中,都涉及到打包——即把订单中的商品用包材进行包裹,常见的打包方式有装袋和装箱。…

算法复杂度 (数据结构)

一. 数据结构前言 1.1 什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。没有一种单一的数据结构对所有用途都有用,所以我们要学各式各样的数据结构,如&#xff1…

[Qt] 信号与槽:深入浅出跨UI与跨线程的信号发送

文章目录 如何自定义信号并使用自定义信号的步骤1.使用 signals 声明信号2. 信号的返回值是 void3. 在需要发送信号的地方使用 emit4. 使用 connect 链接信号和槽5. 完整代码示例总结 如何跨UI发送信号Qt跨UI发送信号机制详解案例概述Qt 信号与槽机制简介代码逻辑详解主窗口 Wi…

进程通讯方式区别(从不同角度看)

*常用到的不同主机间进程通讯:Socket。比如:host和引擎间socket指令通讯、分派和复判之间指令通讯; *共享内存:在Windows系统中,共享内存的实现通常有以下几种方式: 1.内存映射文件(最常用):(…

计算机毕业设计 医院预约挂号系统的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

【01】手把手教你0基础部署SpringCloud微服务商城教学-Mybatis篇(上)

序言: 微服务是一种软件架构风格,它是以专注于单一职责的很多小型项目为基础,组合出复杂的大型应用。 想学习SpringCloud搭建项目,首先我们需要学习的就是Mybatis和Docker。 大家在日常开发中应该能发现,单表的CRUD…

没人告诉你的职场人情世故

看到前同事在群里分享的新年开工遭遇,真是让人感同身受。 第一天就遇到挫折,因为工作做得太快、太早交付,结果反被领导批评,还得重做,头大如斗。这不就提醒我们得时时刻刻记着职场里的那些不成文的规矩吗?…

【C++】常用数据结构纲要(简易版)

非静无以成学。——诸葛亮 数据结构概括 1、什么是数据结构呢?2、讲述过的结构2、1、前言2、2、树->二叉树->两种平衡二叉树2、3、单链表->双链表->带有哨兵位的链表 3、B树3、1、概念及图示3、2、B树数据处理3、2、1、查找3、2、2、插入 4、哈希表4、1…

测试点总结 | 搜索功能如何测试?

这里仅针对通用搜索框的常见测试点进行总结分享,实际工作中需结合搜索功能的背景业务需求及其他依赖条件来综合设计测试点。 一、功能实现部分 (1)如果支持模糊查询,搜索名称中任意一个字符是否能搜索到 对于支持模糊查询的搜索…

猫头虎分享已解决Bug || AssertionError: Torch not compiled with CUDA enabled 解决方案

🐯 猫头虎分享已解决Bug || AssertionError: Torch not compiled with CUDA enabled 解决方案 摘要 今天猫头虎收到粉丝提问:“猫哥,我在使用 PyTorch 进行 AI大模型训练 时,出现了 AssertionError: Torch not compiled with CUD…

10.9 LeetCode 3289 0001 3295

思路: 1、用数组下标来表示是否出现过,初始为 0,出现则加 1,判断大于等于 2 的数字即为多次出现。 2、先将数组排序,依次遍历排序过的数组,若第 i 位与第 i1 位相等,则说明是重复数字。 class …

mybatis解析异常

1.问题现象 Caused by: org.springframework.dao.TransientDataAccessResourceException: Error attempting to get column sale_id from result set. Cause: java.sql.SQLException: Cannot convert value from column 19 to TIMESTAMP. 造成原因:需要给表中中增加字段以满…

审稿人喜欢什么样的Novelty?

在学术出版的世界里,“novelty”(创新性)是一个被频繁提及的词汇。它似乎是衡量一篇文章价值的黄金标准。然而,当我们深入挖掘这个概念时,会发现所谓的创新性并不是那么绝对。今天,我们就来聊聊审稿人眼中的…

No.15 笔记 | CSRF 跨站请求伪造

目录 一、基础知识 (一)cookie 和 session、同源策略 (二)CSRF 原理 二、CSRF 类型 (一)GET 类型 (二)POST 类型 三、CSRF 实例讲解 (一)真实案例 &am…

软件测试学习笔记丨数据库进阶及redis数据库

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32358 一、数据库进阶 1.1 MySQL中SQL执行原理 1. SQL语句执行过程 2. Server组件 连接器:连接管理,权限验证查询缓存:命中直接返回结果分析器&#xff…

秋天来临,猫咪又到换毛季,掉毛严重怎么办?宠物空气净化器有用吗?

秋天到了,新一轮的宠物换毛季又来了。谁能想到这只胖猫和之前刚接回来时的皮包骨小猫是同一只!除了养了一年长了些肉外,更多的都是换毛季掉毛”膨胀“的。每天下班回家都要搞卫生,家里衣服上、地板上,目光所及之处都有…

acwing:1576. 再次树遍历

打卡一道有意义的题。 题签: 通过使用栈可以以非递归方式实现二叉树的中序遍历。 例如,假设遍历一个如下图所示的 66 节点的二叉树(节点编号从 11 到 66)。 则堆栈操作为:push(1); push(2); push(3); pop(); pop(); pu…

智能配音软件哪款好?分享5个搞怪软件

想要让视频或社交媒体内容更加生动有趣?搞笑配音软件是个不错的选择。 无论是嘻哈风格的视频,还是搞怪的段子,合适的配音都能让内容增色不少。 今天,就让我们来探索六个文字配音软件,它们不仅能帮你实现搞笑配音&…

H5如何做性能测试?

说起H5性能测试,可能许多同学有所耳闻,但是不知道该如何去做性能测试,或者不知道H5应该关注哪些性能指标。今天我们就来看下。希望阅读本文后,能够有所了解。 常用指标 1、H5性能相关参数介绍 白屏时间:用户首次看到…

L16171819 【哈工大_操作系统】进程同步与信号量信号量临界区保护信号量的代码实现死锁处理

L2.9 进程同步与信号量 让进程走走停停,实现进程同步。 1.、信号量的定义 生产者Producer需要判断是否还有空闲缓冲区生产资源,所以定义一个标志empty,初始值为最大可用资源数,在开头维护;同时,在消费者…