String类型的详解

2023-05-16

文章目录

  • 一、字符串的定义方式
  • 二、String注意问题
  • 三、内存分布(注意问题详解)
    • 1、分布方式1
    • 2、分布方式2
    • 3.分布方式3
    • 常量池
  • 四、练习问题
    • 问题一:
    • 问题二:
  • 五、字符串不可变
    • 更改String
  • 六、StringBuilder和StringBuffer
    • StringBuilder
    • StringBuffer
    • String和StringBilder、StringBuffer区别
    • 类型的转换
  • 七、字符(char)、字节(byte)、字符串(string)
    • 1.字符串与字符之间的转换
    • 2.字节与字符串
  • 八、字符串比较
  • 九、字符串查找
    • 1.contains
    • 2.indexOf
    • 3.lastIndexOf
    • 4.startsWith
    • 5.endsWith
  • 十、字符串替换
    • 1.replace
    • 2.replaceAll
  • 十一、字符串的拆分
  • 十二、字符串截取
  • 十三、其他方法
  • 十四、练习

一、字符串的定义方式

public static void main(String[] args) {
        //这种方式赋值,和数组相同也是new了一个对象,直接赋值
        String str = "hello";   
        String str1 = new String("hello");
        char[] array = {'a','b','c','d'};//其中a代表偏移量0,b代表偏移量1
        String str2 = new String(array);
        //后面两个参数是两个偏移量,代表两个偏移量也就是c和d。
        String str3 = new String(array,2,2);
    }

二、String注意问题

    public static void main(String[] args) {
        String str = "hello";
        String str1 = new String("hello");
        System.out.println(str == str1);   //false

        String str2 = "he" + new String("llo");
        System.out.println(str == str2);   //false

        String str3 = "he" + "llo";
        System.out.println(str == str3);  //true

        String str4 = "he";
        String str5 = str4 + "llo";
        System.out.println(str5 == str);  // false
    }

小问题:以下str1和str2的区别

String str1 = null;
String str2 = "";

str1没有指向任何对象
str2指向了一个对象,这个对象中没有任何的内容。

三、内存分布(注意问题详解)

1、分布方式1

        String str = "hello";
        String str1 = new String("hello");
        System.out.println(str == str1); //false

因str为局部变量,str在栈上开辟内存指向的对象hello则会在常量池中存储。
str1也是局部变量,str1也在栈上开辟内存而new的对象则在堆上开辟内存,一个在常量池,一个在堆上,指向的对象不同所以返回false。

在new时,会在源码中有这样的两种语句。
在这里插入图片描述
this.value是当前String的value,查看value
在这里插入图片描述
会发现是一个char类型的数组类型(引用)
也就是说你new的时候会在引用中存在一个value[] (数组引用)
在这个数组中存储的是original.value(参数的地址),这个参数的地址是常量池中的hello的地址(语句一中直接赋值的hello的地址)。

2、分布方式2

		String str2 = "he" + new String("llo");
        System.out.println(str == str2);

在str2中的he在常量池中建立对象,new在堆上建立对象这个对象中存了一个常量池中的“llo”(因常量池中没有这个值),所以会新建一个llo值。这两个值拼接在堆上创建一个对象是hello所以返回的还是false。

3.分布方式3

 		String str3 = "he" + "llo";
        System.out.println(str == str3);  //true

        String str4 = "he";
        String str5 = str4 + "llo";
        System.out.println(str5 == str);  // false

str3中he和llo都是常量,所以在编译时就把他直接拼装了放到了常量池中,所以str和str3相等。
str5不相等的原因是str4是一个变量,在编译时不能进行组合。

常量池

同样的字符串只能存放一个,如果有返回现在的地址给引用,如果没有,存放进去,返回地址给引用
池的作用:节省资源。

四、练习问题

问题一:

    public static void change(String str , char[] array){
        str = "hello word";
        array[0] = 'g';
    }
    public static void main(String[] args) {
        String str = "hello";
        char[] array = {'a','b','c','d'};
        System.out.println(str);  //hello
        System.out.println(array);//abcd
        change(str,array);
        System.out.println(str); //hello
        System.out.println(array);//abcd
    }

其中str是传值,而array是传址,str开始在常量池中创建一个hello对象,保存了地址,传过去后又在常量池上创建了hello word,形参保存用来保存这个值,而实参则不会进行改变。

问题二:

在上面代码中知道了以下代码返回的是false

    public static void main(String[] args) {
        String str = "hello";
        String str1 = new String("hello").intern();
        System.out.println(str == str1);//true
    }

此时返回true的原因是,.intern()会先查看常量池中是否有相同的常量,如果有返回这个常量,如果没有那么新建一个,intern()叫做入池。

五、字符串不可变

    public static void main(String[] args) {
        String str = "hello";
        str = str+"word";
        str = str+"hello1";
        System.out.println(str);
    }

在这个过程中产生了大量的临时对象,常量池上产生了:hello、word、hello1
堆上产生helloword、hellowordhello1。字符串的拼接不是在原有的基础上进行相加而是产生一个新的对象后进行返回。

public static void main(String[] args) {
        String str = "hello";
        str = str+"word";
        //在这个过程中str的指向发生了改变。
 }

更改String

要想更改那就需要使用到反射

    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        String str = "abc";
        //反射
        //首先通过类.class获取到要反射的对象, 这个对象中存储的是类的信息
        Class cl = String.class;
        //通过这个方法可以获得一个属性,传的参数是与里面的参数是相同的
        Field valueField = cl.getDeclaredField("value");
        //因这个value是一个private(私有的),下面这行代码表示把这个属性的访问权限设为true
        valueField.setAccessible(true);
        //获取一下str的值给了一个字符数组
        char[] value = (char[])valueField.get(str);
        value[0] = 'h';
        System.out.println(str);
    }

六、StringBuilder和StringBuffer

StringBuilder

stringBuilder的使用

    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("ab");
        stringBuilder.append("cd");
        System.out.println(stringBuilder);
    }

StringBuffer

StringBuffer的使用

    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer("hello");
        System.out.println(stringBuffer);
    }

String和StringBilder、StringBuffer区别

    public static void main(String[] args) {
        String str = "abc";
        String str1 = "def";
        String str2 = str + str1;
        System.out.println(str2);
    }

在以上代码中会进行大量对象,而编译器在进行编译的时候会进行优化

    public static void main(String[] args) {
        String str = "abc";
        String str1 = "def";
        //String str2 = str + str1;
        //System.out.println(str2);
//优化
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(str);
        stringBuilder.append(str1);
        //两边类型不同所以调用toString方法
        String str2 = stringBuilder.toString();
        System.out.println(str2);
    }

区别:

  1. String的拼接会产生新的对象,但是StringBuilder和StringBuffer使用append方法进行拼接,返回的是当前对象。
  2. String的拼接会被优化成StringBuilder
  3. stringbuilder和stringBuffer
    在这里插入图片描述
    在这里插入图片描述
    由上面两张图可以发现StringBuilder比StringBuffer多了一个 synchronized 这个是用来保证线程安全的,所以说在单线程时使用StringBuilder而多线程中使用StringBuffer

类型的转换

String类型转换成StringBuilder(StingBuffer相同)

    public static void main(String[] args) {
        //String 转换成StringBuilder
        String str1 = "abc";
        //1.使用构造方法
        StringBuilder sb = new StringBuilder(str1);
        System.out.println(sb);

        //2.使用append方法。
        StringBuilder sb2 = new StringBuilder();
        sb2.append(str1);
        System.out.println(sb2);
    }

StringBuilder转换成String
使用toSting方法

    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("add");
        String append1 =  stringBuilder.toString();
        System.out.println(append1);
    }

面试题:String与StringBuilder、StringBuffer的区别

  1. String的内容不可修改,StringBuilder与StringBuffer的内容可以修改
  2. StringBuilder与StringBuffer大部分功能相似
  3. StringBuffer采用同步处理,属于线程安全操作;而StringBuilder采用异步处理,属于线程不安全操作。

七、字符(char)、字节(byte)、字符串(string)

1.字符串与字符之间的转换

    public static void main(String[] args) {
        String str = "abcd";
        //charAt获取到指定位置的下标
        //这个str1中存储的是str中2下标的元素
        char str1 = str.charAt(2);
        System.out.println(str1);
        char[] str2 = str.toCharArray();
        System.out.println(str2);
    }

以上两种方式一种是变换称为char类型,一种是变换成为char类型的数组。
小练习:判断字符传中是否全部为数字

    public static void main(String[] args) {
        String str = "01234a67";
        for (int i = 0; i < str.length(); i++) {
            char str1 = str.charAt(i);
            if('0' < str1 && str1 > '9'){
                System.out.println("不都是数字字符");
                return;
            }
        }
        System.out.println("此字符串中全部为数字");
    }

2.字节与字符串

字节转字符串

    public static void main(String[] args) {
        byte[] bytes = {97,98,99,100};
        String str = new String(bytes);
        System.out.println(str);
    }

带有两个参数时,以下代表意思
是从第一个参数开始往后偏移两个单位。

    public static void main(String[] args) {
        byte[] bytes = {97,98,99,100};
        String str = new String(bytes,1,2);
        System.out.println(str);
    }

字符串转字节

    public static void main(String[] args) {
        byte[] bytes = {97,98,99,100};
        String str = new String(bytes,1,2);
        System.out.println(str);

        byte[] bytes1 = str.getBytes();
        System.out.println(Arrays.toString(bytes));
    }

编码转换处理

    public static void main(String[] args) throws UnsupportedEncodingException {
        String str1 = "abcd";
        String str2 = "小明";
        byte[] bytes1 = str1.getBytes("GBK");
        byte[] bytes2 = str2.getBytes("utf-8");
        System.out.println(Arrays.toString(bytes1));
        System.out.println(Arrays.toString(bytes2));
    }

不同的编码格式有不同的

八、字符串比较

    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = "ABC";
        System.out.println(str1.equals(str2));
        System.out.println(str1.equalsIgnoreCase(str2));
        //str1和str2进行比较
        System.out.println(str1.compareTo(str2));
        //三种情况
        //str1>str2   返回值>0
        //str1=str2   返回值=0
        //str1<str2   返回值<0
    }

以上是三种比较方式

  1. equals为比较字符串是否相等
  2. equalsIgnoreCase为忽略大小写比较字符串是否相等
  3. compareTo为比较字符串返回一个值

例题:检查两个字符串是否相等
OJ链接

class Solution {
    public boolean arrayStringsAreEqual(String[] word1, String[] word2) {
        String str1 = "";
        for (int i = 0; i < word1.length; i++) {
            str1 += word1[i];
        }
        String str2 = "";
        for (int i = 0; i < word2.length; i++) {
            str2 += word2[i];
        }
        return str1.equals(str2);
    }
}

思路就是:先拼装起来后进行比较。
优化后

class Solution {
    public boolean arrayStringsAreEqual(String[] word1, String[] word2) {
         StringBuilder sb = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
        for (int i = 0; i < word1.length; i++) {
            sb.append(word1[i]);
        }
        for (int i = 0; i < word2.length; i++) {
            sb2.append(word2[i]);
        }
        return (sb.toString()).equals(sb2.toString());
    }
}

使用StringBuilder来进行操作。

九、字符串查找

1.contains

判断是否有包含相同的字符串

    public static void main(String[] args) {
        String str1 = "abcdefg";
        System.out.println(str1.contains("def"));  //返回true
    }

2.indexOf

在主字符串中查找子字符串的位置。

    public static void main(String[] args) {
        String str1 = "abcdefg";
        System.out.println(str1.indexOf("abc"));  //输出0
    }

自己书写有两种算法
1.BF算法(朴素算法)
2.KMP算法

两个参数:

    public static void main(String[] args) {
        String str1 = "abcdefg";
        //从6号位置开始查找
        System.out.println(str1.indexOf("abc",6));
    }

3.lastIndexOf

从后往前找你所需要的字符串

    public static void main(String[] args) {
        String str1 = "abcabcabcabcabc";
        //System.out.println(str1.contains("def"));
        System.out.println(str1.indexOf("abc",6));
        System.out.println(str1.lastIndexOf("abc",6));
    }

4.startsWith

判断一个字符串是否是以规定字符串开始

public static void main(String[] args) {
        String str1 = "abcabcabcabcabc";
        System.out.println(str1.startsWith("abc"));
        System.out.println(str1.startsWith("abc",5));  //从5号位置开始判断
    }

5.endsWith

判断一个字符串是否以规定字符串结尾。

public static void main(String[] args) {
        String str1 = "abcabcabcabcabc";
        System.out.println(str1.endsWith("abc"));
    }

十、字符串替换

1.replace

两个参数第一个参数是源字符串,第二个参数是要修改的字符串
可以是字符类型,也可以是字符串类型

public static void main(String[] args) {
        String str1 = "abcabcabcabcabc";
        System.out.println(str1);
        String str2 = str1.replace('a','b');
        System.out.println(str2);
        String str3 = str1.replace("abc","ABC");
        System.out.println(str3);
    }

2.replaceAll

比起上面可以传字符类型,这个方法默认就是字符串类型

public static void main(String[] args) {
        String str1 = "abcabcabcabcabc";
        System.out.println(str1);
        String str3 = str1.replaceAll("abc","ABC");
        System.out.println(str3);
    }

十一、字符串的拆分

    public static void main(String[] args) {
        String str1 = "abc&def&hig";
        String[] str2 = str1.split("&");
        for (String s:str2) {
            System.out.println(s);
        }
    }

有一些特殊的字符需要进行转义比如 . 转义时需要注意使用\时在字符串中需要对\进行转义。
在这里插入图片描述

    public static void main(String[] args) {
        String str1 = "192.168.1.10";
        String[] str2 = str1.split("\\.");
        for (String s:str2) {
            System.out.println(s);
        }
    }

加了一个参数代表着分成几组。

    public static void main(String[] args) {
        String str1 = "192.168.1.10";
        String[] str2 = str1.split("\\.",2);
        for (String s:str2) {
            System.out.println(s);
        }
    }

若有多个分割符那么可以使用 | 来进行分割

    public static void main(String[] args) {
        String str1 = "192-168^1$10";
        String[] str2 = str1.split("-|^|$");
        for (String s:str2) {
            System.out.println(s);
        }
    

小练习
第一次根据=分割,第二次根据&进行分割

    public static void main(String[] args) {
        String s1 = "abc&456=def&789";
        String[] strings = s1.split("=");
        for (String s:strings) {
            String[] strings1 = s.split("&");
            for (String s2:strings1) {
                System.out.println(s2);
            }
        }
    }

十二、字符串截取

使用substring的时候,后面参数代表从哪里开始截取,之后的所有字符都被获取到了

    public static void main(String[] args) {
        String str = "abcdefg";
        String str1 = str.substring(2);
        System.out.println(str1);
    }

两个参数的时候第一个参数代表开始,第二个参数代表结束(左闭右开)。

    public static void main(String[] args) {
        String str = "abcdefg";
        String str1 = str.substring(2,5);
        System.out.println(str1);
    }

十三、其他方法

1.trim()

    public static void main(String[] args) {
        String str = "      str   123    ";
        System.out.println(str.trim());   //去除掉左右两边的空格。
    }

2.toUpperCase与toLowerCase

       public static void main(String[] args) {
        String strings = "abcdrf";
        System.out.println(strings.toUpperCase());  //把字符串中所有小写字母全部转化为大写字母。
        String string = "ABCDEF";
        System.out.println(string.toLowerCase());   //把字符串中所有的大写字母全部转化为小写字母。
    }

3.intern

public static void main(String[] args) {
        String str = "hello";
        String str1 = new String("hello").intern();
        //字符串入池操作。
    }

4.concat

    public static void main(String[] args) {
        String str1 = "ab";
        String str2 = "cd";
        System.out.println(str1.concat(str2)); //拼接字符串。
    }

5.isEMpty
判断是否是空字符串。

    public static void main(String[] args) {
        String str1 = "";
        String str2 = null;
        System.out.println(str1.isEmpty());  //true
        System.out.println(str2.isEmpty());  //空指针异常
    }

十四、练习

逆至字符串

public static String reverse(String str) {
		if(str == null)return null;
		if(str.equals(""))return str;
        char[] str1 = str.toCharArray();
        int i = 0;
        int j = str1.length-1;
        while (i < j) {
            char tmp = str1[i];
            str1[i] = str1[j];
            str1[j] = tmp;
            i++;
            j--;
        }
        //return new String(str1);
        return String.valueOf(str1);
    }
    public static void main(String[] args) {
        String str = "abcdef";
        String ret = reverse(str);
        System.out.println(ret);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

String类型的详解 的相关文章

  • Ubuntu 20.04 配置VNC远程桌面访问

    文章目录 Ubuntu 20 04 配置VNC远程桌面访问1 安装和配置ssh2 安装tightvncserver3 安装gnome桌面 Ubuntu 20 04 配置VNC远程桌面访问 1 安装和配置ssh sudo apt instal
  • casbin的匹配策略

    perm元模型 policy是策略或者说是规则的定义 它定义了具体的规则 request是对访问请求的抽象 xff0c 它与e Enforce 函数的参数是一一对应的 matcher匹配器会将请求与定义的每个policy一一匹配 xff0c
  • Ubuntu 开机后界面卡顿解决办法

    1 查看内存使用情况 free span class token operator span h 含义注释 xff1a total 内存总数 used 已经使用的内存数 free 空闲的内存数 shared 多个进程共享的内存总额 buff
  • 实机安装Ubuntu22双系统教程

    准备工作 xff1a 0 下载好Ubuntu映像 1 8G以上U盘 2 启动盘工具 xff0c 推荐Rufus 3 提前分区空闲硬盘 UbuntuISO文件 可以直接去乌班图官网下载 xff0c 写文章所使用版本为 xff1a Ubuntu
  • 如何使用Jlink烧录BIOS到GEC2440

    如何使用Jlink烧录BIOS到GEC2440 1 背景 xff1a 粤嵌教育嵌入式培训班ARM部分第一节课内容是带学生玩板子 xff0c 烧BIOS xff08 即bootloader xff09 到flash xff0c 然后使用BIO
  • C语言 如何用scanf函数输入带空格的字符串

    scanf的返回值是正确输入的参数个数 scanf 函数接收输入数据时 xff0c 遇以下情况结束一个数据的输入 xff1a 1 遇空格 回车 跳格 键 xff1b 2 遇宽度结束 xff1b 3 遇非法输入 以下这段代码 xff1a sp
  • 解决E: 仓库 “http://ppa.launchpad.net/fcitx-team/nightly/ubuntu bionic Release” 没有 Release 文件。

    转载声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 原文链接 xff1a 在NS 3中安装可视化工具pyviz的一些问题的解决 寻同学的博客 CSDN博
  • 解决SSH登录无响应timed out问题

    输入 ssh username 64 xx xx xx xx 光标一直闪烁 xff0c 直到提示连接超时timed out 这是因为服务器端的防火墙禁用了ssh服务的端口 xff0c 默认为22 有两种解决方法 xff1a 1 xff09
  • Ubuntu下VScode配置ssh免密远程登录

    一 实现步骤 1 在本机与远程服务器上 xff0c 输入ssh keygen t rsa xff0c 然后连续回车直到结束 2 在本机上执行命令 ssh copy id 命令 xff08 1 xff09 命令介绍 ssh copy id命令
  • 自己制作树莓派3B+ 64位系统(编译内核+rootfs制作)

    本文章可通过微信公众平台观看 xff1a https mp weixin qq com s VH3Y0uIvfH Mma1h56m6aQ 更多文章以及资源下载可前往微信公众平台 由于树莓派本身编译较慢 xff0c 所以选择在Ubuntu上面
  • centos7 中使用xfsdump恢复文件

    xfs类型的文件可使用xfsdump与xfsrestore工具进行备份恢复 xff0c 若系统总未安装xfsdump与xfsrestore工具 xff0c 可以通过yum y install xfsdump命令安装 xff0c xfsdum
  • 分享一个简单的双色球程序

    前几天写了个双色球的小程序还挺有意思的 分享一下思路和代码 下图是该程序的需求 可以发现红球和蓝球是分开来判定的 xff0c 所以可以将红球组成一个数组 xff0c 蓝球因为只有一个所以可以放一边 我们可以先将随机生成的 红色球 的号码组成
  • BGP——图解5种报文

    目录 BGP的报文头部 BGP的5种报文 Open 只有邻居建立时会发送此报文 Keepalive 邻居建立时 建立后都会发送此报文 Update 邻居建立成功后才会发送此报文 Notification 邻居建立成功后才会发送此报文 Rou
  • Eth-Trunk链路聚合理论

    目录 什么是Eth trunk Eth Trunk的一些概念 LACP模式 手工模式 链路聚合工作机制 负载分担方式 Eth trunk转发原理 什么是Eth trunk Eth trunk xff08 链路聚合技术 xff09 是一种捆绑
  • Linux 软件包安装

    目录 通过源代码编译安装 通过RPM软件包安装 通过Yum软件仓库安装 配置本地Yum源 通过yum安装软件 通过Dnf软件仓库安装 Linux软件包安装有四种方式 xff1a 源代码 RPM Yum Dnf安装四种方式 通过源代码编译安装
  • MDK + Jlink + SDRAM 裸奔2440教程

    MDK 43 Jlink 43 SDRAM 裸奔2440教程 Author xff1a Aston ofgec deu org 1 背景 很多人学习嵌入式编程都是从裸机开始的 xff08 我个人也是 xff09 这并不是偶然 xff0c 想
  • 谷歌浏览器打开显示2345或360等其他主页的解决方法

    方法如下 xff1a 右键 属性 2 删除圈出来的 Application 应用 重新打开就可以了 如果不行的话 xff0c 进行下面的操作 xff1a 右键快捷方式查看属性 打开文件所在位置 软件重新命名 重复开头的1和2操作就可以了
  • 腾讯运维工程师认证(TCA)认证考试的知识点

    前言 腾讯运维工程师认证 xff08 TCA xff09 认证考试的知识点 xff0c 以下分享以下我的学习笔记 下面是第一章 腾讯运维的概述 一 腾讯云产品概述 1 云网络 包括 xff1a 负载均衡 私有网路 弹性网卡 专线接入 NAT
  • undefined reference to `pthread_create`的解决方法

    在linux中出现一下的报错 test pc c text 43 0x2b7 undefined reference to 96 pthread create 39 test pc c text 43 0x2d2 undefined ref
  • python基础学习值输入A和B,输出

    问题描述 xff1a xff11 输入A B xff0c 输出A 43 B xff12 输入的第一行包括两个整数 xff0c 由空格分隔 xff0c 分别表示A B 代码 xff1a a 61 input split print int a

随机推荐

  • python基础学习数列排序(给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200)

    问题描述 xff1a 给定一个长度为n的数列 xff0c 将这个数列按从小到大的顺序排列 1 lt 61 n lt 61 200 第一行为一个整数n 第二行包含n个整数 xff0c 为待排序的数 xff0c 每个整数的绝对值小于10000
  • python基础学习——十六进制转八进制——蓝桥杯

    目录 1 题目描述 2 思路 3 方法 3 1方法一 3 2方法二 1 题目描述 给定n个十六进制正整数 xff0c 输出它们对应的八进制数 输入的第一行为一个正整数n xff08 1 lt 61 n lt 61 10 xff09 接下来n
  • 手把手教你编写跑马灯——STM32

    一 创建项目 新建一个文件夹 xff0c 打开KeiL projiece new vision projection 给文件命名 xff08 随便取 xff09 根据自己开发板的信号选择对应的型号 在刚才创建的文件夹里面新建一个main c
  • 超详细的python调用树莓派的摄像头基本使用

    这里首先讲解的是CSI摄像头 picamera 1 1录制一段10秒的视频到本地 import picamera camera 61 picamera PiCamera camera resolution 61 640 480 camera
  • 手把手教你写MC9S12G128 Timer

    目录 一 TIM模块概述 1 定时器 计数器的特点 2 嵌入式系统中定时器 计数器模块的作用 二 TIM模块结构和工作原理 1 TIM结构模块 1 1 TIM组成 1 2 特点 2 TIM模块工作原理 2 1 工作模式 2 2 定时器模块框
  • opencv 显示图片

    import cv2 import numpy as np 读取图片 img 61 cv2 imread 39 test16 jpg 39 图片显示 cv2 imshow 39 picture 39 img cv2 waitKey 0 cv
  • VMware+Ubuntu与Windows宿主机文件共享的实现

    学习嵌入式开发 xff0c Linux环境是必不可少的 现在一般都会选择在Windows上用VMware 43 Ubuntu的方式来构筑交叉开发环境 这样的好处是 xff0c 既不离开Windows这个熟悉的环境 xff08 有很多Wind
  • 大数据概论

    一 xff0e 大数据 大数据 xff08 big data xff09 xff0c 指无法在一定时间范围内用常规软件工具进行捕捉 管理和处理的数据集合 xff0c 是需要新处理模式才能具有更强的决策力 洞察发现力和流程优化能力的海量 高增
  • 基于ESP32搭建物联网服务器十三(自已搭建一个MQTT服务器)

    在之前的文章中 ESP32搭建WEB服务器十二 使用MQTT协议与ESP32互动 你的幻境的博客 CSDN博客 我们已经实现了ESP32通过MQTT协议连接到公共MQTT服务器上 xff0c 但是公共服务器在稳定性或安全性上 xff0c 很
  • flash烧写uboot举例

    烧写uboot到QSPIFLASH 简述 xff1a 主要是讲ZYNQ7000系列的烧写文件方法 xff0c 衔接上文链接 Petalinux工具编译生成boot和kernel等流程 JTAG下载全部镜像到内存运行 以下操作在XSDK环境下
  • 1000+ 道 Java面试题及答案整理(2023最新版)

    作为 Java 程序员 xff0c 选择学习什么样的技术 xff1f 什么技术该不该学 xff1f 去招聘网站上搜一搜 看看岗位要求就十分清楚了 xff0c 自己具备的技术和能力 xff0c 直接影响到你工作选择范围和能不能面试成功 如果想
  • 锁与CAS详解

    一 悲观锁与乐观锁 乐观锁和悲观锁问题 xff0c 是出现频率比较高的面试题 本文将由浅入深 xff0c 逐步介绍它们的基本概念 实现方式 含实例 适用场景 xff0c 以及可能遇到的面试官追问 xff0c 希望能够帮助你打动面试官 乐观锁
  • PowerShell知识整理

    文章目录 前言一 快捷键二 符号2 1 常用符号2 2 条件运算符 三 常用辅助命令四 信息的筛选4 1 正则表达式4 2 管道4 2 1 基本概念4 2 2 Get Member4 2 3 Where Object4 2 4 Select
  • 树莓派登入ssh很慢和开机启动tightvncserver及其他问题

    树莓派登入ssh 很慢 关闭 ssh的gssapi认证 执行命令 xff1a sudo vim etc ssh ssh config 在该文件的末尾找到这两行设置并注释掉 span class token macro property GS
  • 光波长与RGB数值的转换

    最近做毕业设计时 xff0c 需要Matlab仿真计算彩色物体的散射图像 计算中需要用到彩色图片 xff08 RGB色彩模式 xff09 对应的光波长数值 查找资料发现可以实现 xff1a 由光波长求对应RGB数值 正在做尝试 xff0c
  • 【原创】Git删除暂存区或版本库中的文件

    0 基础 我们知道Git有三大区 xff08 工作区 暂存区 版本库 xff09 以及几个状态 xff08 untracked unstaged uncommited xff09 xff0c 下面只是简述下Git的大概工作流程 xff08
  • Ubuntu20.04和Ubuntu18.04更换清华镜像源

    1 备份Ubuntu默认的源地址 在终端输入 xff1a sudo cp etc apt sources list etc apt sources list backup 2 xff1a 更新源服务器列表 span class token
  • keil5安装后续 错误解决

    嵌入式 keil5安装 软件安装 STM32 有个博主讲的很好 xff0c 可以参考 xff0c 也有资源提供下载 点这里 xff0c 电梯直达 第一个错误解决 Fatal error cannot open the source file
  • gcc常用参数

    今晚看了些有关gcc的编译选项的内容 xff0c 记录下来以备查用 1 gcc c 只编译不链接 xff0c 生成 o文件 例如 xff0c gcc c hello c xff0c 将由hello c得到hello o 2 gcc o 直接
  • String类型的详解

    文章目录 一 字符串的定义方式二 String注意问题三 内存分布 xff08 注意问题详解 xff09 1 分布方式12 分布方式23 分布方式3常量池 四 练习问题问题一 xff1a 问题二 xff1a 五 字符串不可变更改String