Javase | 字符编码、转义字符、方法执行过程中的 “内存分配”

news2024/11/27 12:39:38

目录:

    • 字符编码
    • 转义字符:
        • 转义字符
        • 在控制台上输出 “反斜杠字符”
        • 在控制台上输出 “单引号字符”
    • 方法执行过程中的 “内存分配”

字符编码

  • 为了让计算机可以表示现实世界中的文字,我们需要人为进行干涉,需要人负责提前制定文字” 和 “二进制” 之间的对照关系。这种对照关系被称为:字符编码
  • 字符编码就是人为干涉的一本字典 / 一张对照表,在这种对照表中很清楚的描述了 “文字”和“二进制‘之间的对照关系
  • 计算机 最初只支持英文最先出现字符编码是: ASCII码 。编码和解码的时候采用同一套字典/对比表,不会出现乱码。

  • 随着计算机的发展,后来出现了一种新的编码方式,是国际化标准组织ISO制定的,这边编码方式支持西欧语言。其会向上兼容ASCII码,仍然不支持中文。这种编码方式是 : ISO-8859-1 ,又被称为 latin-1

  • 随着计算机向亚洲发展,计算机开始支持中文、日文、韩文等国家文字,其中支持简体中文的编码方式:GB2312 < GBK < GB18030

    GB2312可表示的汉字最少GB2312可表示的汉字最多

  • 支持繁体中文 : 大五码 Big5

  • 后来出现了一种编码方式统一了全球所有文字,容量较大,这种编码方式叫做:unicode编码 (万国码)。

  • unicode编码方式有多种具体的实现:

    UTF-8
    UTF-16
    UTF-32

  • Java语言代码采用的是unicode编码,所以“标识符”可以识别中文

转义字符:

转义字符

  • 字符常量中,反斜杠号\ )具有转义功能,是 转义字符是不能单独出现

  • 转义字符” 结合 “特定的字符” 能形成一个“新的字符”。

  • 转义字符的作用是转义后面的一个字符

    转义字符出现在特殊字符之前会将特殊字符转义成普通字符

    如:

    char c1 = ‘n’; //字符n 和 字符 t 是一个普通字符
    char c2 = ‘t’;
    此时 反斜杠号 (\) 是转义字符。两者相结合转义成一个新的字符

    \+n —-> \n : 表示换行符 (表示的是一个字符)

    \+t —–> \t : 表示制表符 (表示的是一个字符)

    例子如:

     //字符n 和 字符t 是一个普通字符
        char c1 = 'n';
        char c2 = 't';
    
        /*
         * “转义字符” 结合 “特定的字符”能形成一个“新的字符”。
         *
         *   n  : 普通字符
         *   \  : 转义字符
         *   \n : 转义成一个新的字符 : 换行符
         */
    
        /*
         *  t  : 普通字符
         *  \  : 转义字符
         *  \t : 转义成一个新的字符: 制表符
         */
    

    有一个问题:

    既然反斜杠号 (\)转义字符,且不能单独出现 (”转义字符“ 配合 “特定的字符” 一起使用),那如果我们想要输出,或说就要输出 (普通含义/ 键盘含义上的) 反斜杠号本身那咋办呢?

    好办,那就让 “转义字符”是它,“特定的字符”也是它。即 反斜杠号 (\) + 反斜杠号 (\) , 两个结合的含义就是普通含义反斜杠号字符 (\)
    如 : \\ —> \

    (第一个“转义字符“ 有转义功能,它会把后面那个有也有转义功能、也有特殊含义的“转义字符” 转换成不具备特殊含义普通斜杠字符

    结论:
    在java中两个反斜杠(转义字符) 代表一个普通的反斜杠字符

转义字符出现在特殊字符之前会将特殊字符转义成普通字符

\n : 换行符

\r : 回车符

\t : 制表符

\’ : 普通的单引号

\" : 普通的双引号

在控制台上输出 “反斜杠字符”

  • 有一个问题:

  • 既然反斜杠号 (\)转义字符,且不能单独出现 (”转义字符“ 配合 “特定的字符” 一起使用),那如果我们想要输出,或说就要输出 (普通含义/ 键盘含义上的) 反斜杠字符本身那咋办呢?

  • 好办,那就让 “转义字符”是它,“特定的字符”也是它。即 反斜杠号 (\) + 反斜杠号 (\) , 两个结合的含义就是普通含义反斜杠号 (\)

    如 : \\ —> \

    (第一个“转义字符“ 有转义功能,它会把后面那个有也有转义功能、也有特殊含义的“转义字符” 转换/转义 成不具备特殊含义普通斜杠字符

    结论:
    在java中两个反斜杠(转义字符) 代表一个普通的反斜杠字符

在控制台上输出 “单引号字符”

  • 反斜杠具有转义功能

  • 反斜杠 + 一个单引号 字符 : 将有特殊含义单引号转义成 普通单引号。即可 (在控制台) 输出 “单引号字符”。

    转义字符将有特殊含义单引号转义成普通单引号

        /*
         * 在控制台上输出一个普通的单引号字符 :
         * 用转义字符,将有配对功能的"单引号" 转义成: 普通的 "单引号"
         */
        //反斜杠具有转义功能,将第二个单引号转换/转义为: 普通的单引号字符
        //第一个单引号和最后一个单引号配对。
        char c3 = '\'';
        System.out.println(c3);
    
            //在控制台上输出一个普通的单引号字符
            char c = 'a'; //正常输出字符a
    
            //java中不允许这样编写程序,会编译报错
            char c1 ='';
    
            //以下编译报错: 第一个单引号和第二个单引号配对,最后的单引号找不到最后一半。
            char c2 =''';
    
            /**
             * 在控制台上输出一个普通的单引号字符 :
             * 用转义字符,将有配对功能的"单引号" 转义成: 普通的"单引号"
             */
            //反斜杠具有转义功能,将第二个单引号转换/转义为: 普通的单引号字符
            //第一个单引号和最后一个单引号配对。
            char c3 = '\'';
            System.out.println(c3);
    

方法执行过程中的 “内存分配”

  • 分析下面类中方法执行过程中的 “内存分配”
```java
public class MethodTest {
    public static void main(String[] args) {
        int a =10;
        int b =20;

        int resultValue = sumInt(a,b);
        System.out.println(resultValue);
    }
 
    private static int sumInt(int i, int j) {
        int result =i + j;
        int num =3;
        int resultValue = divide(result, num);
        return resultValue;
    }

    private static int divide(int x, int y) {
        int z = x / y;
        return z;
    }
}
```
  • 类加载。把MethodTest类String类System类加载到 JVM中。

  • ②执行main方法 。开辟一个属于main方法的独立的 (栈内存) 内存空间。
    依次执行main方法中的ab变量sumInt( )方法。a b变量是局部变量在main内存中开辟两个空间存放。执行sumInt( )方法

  • ③执行 sumInt( )方法。开辟一个属于sumInt方法的独立的 (栈内存) 内存空间。方法内的变量为局部变量。参数传递的是

  • ④执行 divide( )方法。开辟一个属于divide方法的独立的 (栈内存) 内存空间。方法内的变量为局部变量。参数传递的是

  • ⑤ 最后一层一层return值

    在这里插入图片描述

  • ps :

    方法中进行参数传递时,传递的变量中保存的

    ②处于栈顶部的元素是活跃状态

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

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

相关文章

Linux系统之mkdir与rmdir命令的基本使用

Linux系统之mkdir与rmdir命令的基本使用 一、mkdir命令介绍1.1 mkdir命令简介1.2 mkdir命令的由来 二、mkdir命令的使用帮助2.1 mkdir命令的help帮助信息2.2 mkdir命令的选项解释 三、mkdir命令的基本使用3.1 查看mkdir的版本3.2 创建一个新目录3.3 创建目录时设置目录权限3.4 …

【MySQL基础|第一篇】——谈谈SQL中的DDL语句

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 前言&#xff…

vue优化首屏加载时间优化-cdn引入第三方包

前言 为什么要进行首屏加载优化&#xff0c;因为随着我们静态资源和第三方包和代码增加&#xff0c;压缩之后包会越来越大 随着网络的影响&#xff0c;在我们第一输入url请求资源时候&#xff0c;网络阻塞&#xff0c;加载时间长&#xff0c;用户体验不好 仔细观察后就会发现…

linux和macOS平台中python语言文件上传的一处不同实现

背景 linux系统&#xff0c; python语言&#xff0c;tornado框架 现象 x文件在macOS平台可正常上传&#xff0c; linux平台上传失败。 x文件说明 文件名&#xff1a;xxxx秘密 .mp3 文件格式&#xff1a;mp3 原因 文件名包含\x20\x7f导致, \x20是设备控制&#xff0c; \…

Android逆向工程【黑客帝国】

Android逆向是一门艺术&#xff0c;涵盖的范畴非常广&#xff0c;要学习的东西也很多&#xff0c;如果是为了就业目的&#xff0c;学习的偏向性一定要掌握好。而Android逆向必须掌握的技能有以下&#xff1a; 负责安卓程序的加解密和数据传输分析、拆解、逆向等工作;逆向APK,了…

Agisoft/PhotoScan手动对齐照片

所以我到网上查了一下资料&#xff0c;了解了如何通过添加标记的方式&#xff0c;手动对齐照片。参考文档是PhotoScan的用户手册(http://www.agisoft.com/pdf/photoscan-pro_1_4_en.pdf)。 手动对齐照片&#xff0c;需要在未对齐照片上添加四个及以上标记&#xff0c;并在已对…

Android——数据存储(一)(二十一)

1. 数据存储 1.1 知识点 &#xff08;1&#xff09;掌握Android数据存储的分类&#xff1b; &#xff08;2&#xff09;可以使用SharedPreferences存储数据。 1.2 具体内容 对于我们数据的存储而言&#xff0c;Android一共提供了5个数据存储的方式&#xff1a;SharedPrefe…

Swift 另辟蹊径极速生成图片的缩略图

功能需求 在 App 开发中,创建图片缩略图是一种很常见的操作。但是超大图片如何快速且便捷的生成指定尺寸的缩略图呢? 如上图所示:我们极速生成缩略图比常规方式快了将近 27 倍之多!且生成代码没有用任何第三方库,完全是  原生实现。 在上面演示中包含几张数码相机原始…

huggingface 使用入门笔记

概念 Hugging Face Hub​​和 Github 类似&#xff0c;都是Hub(社区)。Hugging Face可以说的上是机器学习界的Github。Hugging Face为用户提供了以下主要功能&#xff1a; ​模型仓库&#xff08;Model Repository&#xff09;​​&#xff1a;Git仓库可以让你管理代码版本、…

动态规划区间dp之647回文子串

题目&#xff1a; 给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 示例&#xff1a; 题目链接&#xff1a;647.…

Android 线程池源码详解(一)

线程池的创建是通过Executors 构造出来的&#xff0c;这是个典型的工厂类&#xff0c;使用了工厂模式。常用的有四种线程池&#xff1a; 分别是newFixedThreadPool&#xff0c;newSingleThreadExecutor&#xff0c; newCachedThreadPool&#xff0c;newScheduledThreadPool&am…

小白备战大厂算法笔试(二)——数组、链表、列表

常见数据结构 常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图&#xff0c;它们可以从“逻辑结构”和“物理结构”两个维度进行分类。 逻辑结构可被分为“线性”和“非线性”两大类。线性结构比较直观&#xff0c;指数据在逻辑关系上呈线性排列&#xff1b;非线…

制药行业常见生产设备有哪些?

制药行业是一个关系到人民健康和生命安全的特殊领域&#xff0c;因此&#xff0c;生产质量和合规性是至关重要的。为了满足严格的生产质量管理规范&#xff08;GMP&#xff09;要求&#xff08;>>制药行业GMP是什么&#xff1f;&#xff09;&#xff0c;制药企业需要使用…

公司办公文件加密防泄密软件哪个好?

天锐绿盾是一款专业的数据安全解决方案&#xff0c;旨在保护企业的核心数据。它采用基于Windows、Mac、Linux内核的文档透明加解密技术&#xff0c;对指定类型的文件进行实时、强制、透明加密&#xff0c;使得文件在操作时自动解密&#xff0c;关闭时自动加密&#xff0c;能够有…

基于物理层网络编码的相位同步算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..........................................................................%数据长度 Len…

前端(十七)——gitee上开源一个移动端礼盒商城项目(前端+后台)

&#x1f917;博主&#xff1a;小猫娃来啦 &#x1f917;文章核心&#xff1a;gitee上开源一个移动端礼盒商城项目 文章目录 前言开源地址项目运行命令项目基本展示前端效果细节展示视频前端代码细节展示视频后台效果展示后台代码展示经典优势思维导图实现思路 前言 项目样式老…

Redux中间件源码解析与实现

基本介绍 本文中涉及到的关键npm包的版本信息如下&#xff1a; react 的版本为18.2.0 redux的版本为4.1.2 redux-thunk版本为2.4.2 redux-promise版本为0.6.0 redux-logger版本为3.0.6 在Redux源码解析与实现&#xff08;一&#xff09;Redux源码解析与实现&#xff08;二&…

Python爬虫:下载小红书无水印图片、视频

该代码只提供学习使用&#xff0c;该项目是基于https://github.com/JoeanAmier/XHS_Downloader的小改动 1.下载项目 git clone https://github.com/zhouayi/XHS_Downloader.git2.找到需要下载的文章的ID 写入main.py中 3.下载 python main.py最近很火的莲花楼为例<嘿嘿…

【Java】传输层UDP

传输层UDP UDP基本特点无连接不可靠面向数据报缓冲区大小受限 UDP协议端格式16位UDP长度16位UDP检验和 UDP基本特点 UDP传输的过程类似于寄信 无连接,不可靠传输,面向数据报,全双工 无连接 知道对端的IP和端口号就直接进行传输&#xff0c;不需要建立连接&#xff1b; 不可…

Linux进程间通信(IPC)的几种方式

概述: “ 进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;&#xff0c;指至少两个进程或线程间传送数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位(进程是分配资源最小的单位&#xff0c;而线程是调度的最小单位&#xff0c;…