String的讲解(Java系列9)

news2024/11/16 9:38:53

目录

前言:

1.String

1.1字符串的构造

1.2Sting对象的比较

1.3字符串的查找

1.4字符串的转化

1.4.1数值和字符转换

1.4.2大小写转换

1.4.3字符串转数组

1.4.4格式化

1.5字符串的替换

1.6字符串拆分

1.7字符串截取

1.8字符串去空格

1.9字符串的不可变性

1.10字符串修改

2.StingBuilder和StingBuffer

2.1StringBuffer

2.2StringBuilder

2.3String、StringBuilder和StringBuffer的区别

结束语:


前言:

在C语言中我们是没有String这个概念的,在C语言中我们都是通过指针来表达的,但是在Java中我们就可以通过String来表示一个字符串了。那么接下来就和小编一起来见识一下String究竟是什么,我们又该怎么使用他们。

1.String

为什么会出现String类呢?

在C语言中以及涉及到了字符串这个概念了,但是在C语言中要表示字符串只能使用字符数组或者是字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数组和操作数据方法分离开的方式不符合面向对象的思想,而字符串应用有非常广泛,因此Java语言专门提供了String类。

1.1字符串的构造

常用的三种构造方式:

代码如下所示:

public class Test1 {
    public static void main(String[] args) {
        //1.使用常量串构造
        String str1 = "str1:hello";
        System.out.println(str1);
        //2.直接new一个String对象
        String str2 = new String("str2:hello");
        System.out.println(str2);
        //3.使用字符数组进行构造
        char[] array = {'s','t','r','3',':','h','e','l','l','o'};
        String str3 = new String(array);
        System.out.println(str3);
    }
}

结果如下所示:

 注意:

1.String是引用类型,内部并不存储字符串本身。

2.在Java中“”引起来的也是String类型对象。

1.2Sting对象的比较

1.==比较是否引用同一个对象。

代码如下所示:

public class Test2 {
    public static void main(String[] args) {
        //对于基本类型变量,==比较两个变量中存储的值是否相同。
        int a = 10;
        int b = 20;
        int c = 10;
        System.out.println(a == b);
        System.out.println(a == c);
        //对于引用类型变量,==比较两个引用变量引用的是否为同一个对象。
        String s1 = new String("hello");
        String s2 = new String("hello");
        String s3 = new String("world");
        System.out.println(s1 == s2);
        System.out.println(s2 == s3);
    }
}

结果如下所示:

2.boolean equals (Object anObject),那么我们可以通过equals来进行比较两个引用所指向的对象当中的内容是否是一致的。

代码如下所示:

public class Test3 {
    public static void main(String[] args) {
        String s1 = new String("hello");
        String s2 = new String("hello");
        String s3 = new String("world");
        System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
    }
}

结果如下所示:

3.int compareTo(String s)比较两个字符串的大小,方法:按照字典序进行比较。

与equals不同的是,equals返回的是Boolean类型,而compareTo返回的是int类型。具体的比较方法如下所示:

  • 先按字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值。
  • 如果前K个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值。

代码如下所示:

public class Test1 {
    public static void main(String[] args) {
        String s1 = "abcdef";
        String s2 = "abcdfe";
        String s3 = "abcd";
        String s4 = "abcd";
        System.out.println(s1.compareTo(s2));//不同输出字符差值-1
        System.out.println(s1.compareTo(s3));//前K个字符相同,则输出长度差值2
        System.out.println(s3.compareTo(s4));//相同则输出0
    }
}

如果如下所示:

4.int compareTolgnoreCase(String str)忽略大小写进行比较,方法:与compareTo方式相同,但是忽略大小写比较。

代码如下所示:

public class Test1 {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "Hello";
        String s3 = "world";
        System.out.println(s1.compareToIgnoreCase(s2));
        System.out.println(s1.compareToIgnoreCase(s3));
    }
}

结果如下所示:

1.3字符串的查找

1.char charAt(int index),返回index位置上的字符,如果index为负数或者越界,抛出indexOutOfBoundsException异常。

代码如下所示:

public class Test1 {
    public static void main(String[] args) {
        String s1 = "hello";
        System.out.println(s1.charAt(0));
        System.out.println(s1.charAt(1));
        System.out.println(s1.charAt(2));
        System.out.println(s1.charAt(3));
        System.out.println(s1.charAt(4));
        //System.out.println(s1.charAt(5));//会抛出异常
    }
}


结果如下所示:

 

2.int intdexOf(int ch),返回的是ch第一次出现的位置,没有则返回-1。

代码如下所示:

public class Test4 {
    public static void main(String[] args) {
        String s1 = "hello world";
        System.out.println(s1.indexOf('e'));
    }
}

结果如下所示:

 

3.int indexOf(int ch , int fromIndex),从fromindex位置开始查找ch第一次出现的位置,没有则返回-1。

代码如下所示:

public class Test3 {
    public static void main(String[] args) {
        String s1 = "hello world";
        System.out.println(s1.indexOf("o",5));
    }
}

结果如下所示:

4.int index(String str),返回str第一次出现的位置,没有则返回-1。

代码如下所示:

public class Test5 {
    public static void main(String[] args) {
        String s1 = "abcdef";
        System.out.println(s1.indexOf("cd"));
    }
}

结果如下所示:

 

5.int intdex(String str, int fromIndex),从fromindex位置开始找str第一次出现的位置,没有返回-1。

代码如下所示:

public class Test6 {
    public static void main(String[] args) {
        String s1 = "abcdefabcd";
        System.out.println(s1.indexOf("abc",4));
    }
}

 

结果如下所示:

6.int lastindex(int ch),从后往前找,返回ch第一次出现的位置,没有则返回-1。

代码如下所示:

public class Test7 {
    public static void main(String[] args) {
        String s1 = "acbcdefabcd";
        System.out.println(s1.lastIndexOf('a'));
    }
}

结果如下所示:

7.int lastIndex(int ch, int fromindex),从fromindex位置开始找,从后往前找ch第一次出现的位置,没有返回-1。

代码如下所示:

public class Test8 {
    public static void main(String[] args) {
        String s1 = "acbcdefabcd";
        System.out.println(s1.lastIndexOf('b',4));
    }
}

结果如下所示:

 

8.int lastIndexOf(String str),从后往前找,返回str第一次出现的位置,没有则返回-1。

代码如下所示:

public class Test9 {
    public static void main(String[] args) {
        String s1 = "hello world";
        System.out.println(s1.lastIndexOf("or"));
    }
}

结果如下所示:

9.int lastIndexOf(String str,int fromlndex),从fromindex位置往前找,从后往前找str第一次出现的位置,没有则返回-1。

代码如下所示:

public class Test10 {
    public static void main(String[] args) {
        String s1 = "hello world";
        System.out.println(s1.lastIndexOf("or",3));
    }
}

 

结果如下所示:

1.4字符串的转化

对于字符串的转换返回的都是一个新的字符串,不会再之前的字符串基础上进行操作。

1.4.1数值和字符转换

代码如下所示:

public class Test11 {
    public static void main(String[] args) {
        //数字转字符串
        String s1 = String.valueOf(123);//将整形转换成字符型
        String s2 = String.valueOf('s');//将字符型转换成字符型
        String s3 = String.valueOf(1.2f);//将单精度浮点型转换成字符型
        String s4 = String.valueOf(1.23);//将双精度浮点型转换成字符型
        String s5 = String.valueOf(123L);//将long转换成字符型
        System.out.println("-----数字转字符串---");
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);
        System.out.println(s5);
        System.out.println("-----字符串转数字----");
        //字符串转数字
        int d1 = Integer.parseInt("1234");
        short d2 = Short.parseShort("12");
        double d3 = Double.parseDouble("12.3");
        float d4 = Float.parseFloat("1234.5");
        long d5  = Long.parseLong("123");
        System.out.println(d1);
        System.out.println(d2);
        System.out.println(d3);
        System.out.println(d4);
        System.out.println(d5);
    }
}

 

结果如下所示:

1.4.2大小写转换

  • toUpperCase:转大写
  • toLowerCase:转小写

代码如下所示:

public class Test12 {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "HELLO";
        String s3 = "Hello";
        System.out.println(s1.toUpperCase());//转大写
        System.out.println(s2.toLowerCase());//转小写
        System.out.println(s3.toLowerCase());//不一样的字符,转小写
        System.out.println(s3.toUpperCase());//不一样的字符,转大写
    }
}

结果如下所示:

 

1.4.3字符串转数组

代码如下所示:

public class Test13 {
    public static void main(String[] args) {
        //字符串转数组
        System.out.println("-----字符串转数组---");
        String s1 = "1234";
        char[] array = s1.toCharArray();
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println();
        //数组转字符串
        System.out.println("-----数组转字符串---");
        String s2 = new String(array);
        System.out.println(s2);
    }
}

结果如下所示:

 

1.4.4格式化

代码如下所示:

public class Test14 {
    public static void main(String[] args) {
        String s1 = String.format("%d-%d-%d",2023,1,4);
        System.out.println(s1);
    }
}

结果如下所示:

 

1.5字符串的替换

使用一个指定的字符串替换掉所有的字符串数据,可用以下方法:

  • replaceAll:替换所有的指定内容
  • replaceFirst:替换首个内容

代码如下所示:

public class Test15 {
    public static void main(String[] args) {
        //替换所有的指定内容
        System.out.println("---替换所有的指定内容--");
        String s1 = "hello world";
        String s2 = s1.replaceAll("l","_");
        System.out.println(s2);
        //替换首个内容
        System.out.println("------替换首个内容------");
        System.out.println(s1.replaceFirst("l","_"));
    }
}

 

结果如下所示:

注意:由于字符串是不可变对象,替换不修改当前字符串,而是产生一个新的字符串。

1.6字符串拆分

关键字:split

代码如下所示:

public class Test16 {
    public static void main(String[] args) {
        String s1 = "Embrace you through the wind and rain";
        //将字符全部拆分
        System.out.println("---------将字符全部拆分------");
        String[] array1 = s1.split(" ");//按空格进行分隔
        for (String i:array1) {
            System.out.println(i);
        }
        //将字符串以指定的格式,拆分为指定的组数
        System.out.println("----将字符串以指定的格式,拆分为指定的组数---");
        String[] array2 = s1.split(" ",4);
        for (String s:array2) {
            System.out.println(s);
        }
    }
}

结果如下所示:

注意:

  • 字符“|”,“*”,“+”都得加上转义字符,前面加上“\\”。
  • 而如果是“\\”,那么就得写成“\\\\”。
  • 如果一个字符串中有多个分隔符,可以用“|”作为连字符。

代码如下所示:

public class Test17 {
    public static void main(String[] args) {
        String s1 = "198.123.890";
        String[] array1  = s1.split("\\.");
        for (String s:array1) {
            System.out.println(s);
        }
        System.out.println("--------------------");
        String s2 = "1233=32-21";
        String[] array2 = s2.split("=|-");
        for (String s:array2) {
            System.out.println(s);
        }
        System.out.println("--------------------");
        String s3 = "1243\\2324";
        String[] array3 = s3.split("\\\\");
        for (String s:array3) {
            System.out.println(s);
        }
    }
}

结果入下所示:

 

1.7字符串截取

关键字:substring

代码如下所示:

public class Test18 {
    public static void main(String[] args) {
        String s1 = "Embrace you through the wind and rain";
        //从指定的索引截取结尾
        System.out.println("-------从指定的索引截取结尾----");
        System.out.println(s1.substring(7));
        //截取部分内容
        System.out.println("--------截取部分内容------");
        System.out.println(s1.substring(7,17));
    }
}

结果如下所示:

注意:截取部分的时候是“左闭右开”的,也就是在上述代码中可以截取到7,但是截取不到17位置上的字母,即[7,17)

1.8字符串去空格

关键字:trim

trim是去掉字符串左右的空格保留中间的空格。

代码如下所示:

public class Test19 {
    public static void main(String[] args) {
        String s1 = "    Embrace you through the wind and rain     ";
        System.out.println("去掉之前:");
        System.out.println(s1);
        System.out.println("去掉之后:");
        System.out.println(s1.trim());
    }
}

 

结果如下所示:

1.9字符串的不可变性

String是一种不可变对象,字符串中的内容是不可以改变的,字符串不可以被修改,是因为:

1.String在设计的时候就是不可变的,我们可以看一下String类中的描述。

 

由上述图可得:

  • String类中数值实际是保存在value数组中,而该成员变量是由private修饰的,所以是不可以修改的。
  •  其次我们还可以看出String类是有fina修饰的,故不可以被继承。
  • value被final修饰,表明value自身的值不能改变,即不能引用其他字符数组,但是其引用空间中的内容可以修改。

2.所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象。 

1.10字符串修改

在使用String的时候应该尽量避免直接对字符串进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下。

如下面的代码所示:

public class Test20 {
    public static void main(String[] args) {
        String s1 = "hello";
        s1 += " world";
        System.out.println(s1);
    }
}

在进行字符串拼接的时候就会产生新的对象。所以会大大降低速率。那么怎样才能提高效率呢?

接下来我们就看StringBuilder和StringBuffer都有哪些好处吧。 

2.StingBuilder和StingBuffer

由于String的不可更改性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个大部分功能是相同的,下面我们就来分别看一下吧!

2.1StringBuffer

1.尾部追加:append

代码如下所示:

public class Test21 {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = " world";
        StringBuffer stringBuffer = new StringBuffer(s1);
        stringBuffer.append(s2);
        System.out.println(stringBuffer);
    }
}


结果如下所示:

2.char charAt(int index)获取index位置的字符。

代码如下所示:

public class Test22 {
    public static void main(String[] args) {
        String s1 = "hello";
        StringBuffer stringBuffer = new StringBuffer(s1);
        char ret = stringBuffer.charAt(2);
        System.out.println(ret);
    }
}

结果如下所示:

 3.void setCharAt(int index,char ch),将index位置的字符设置为ch。

代码如下所示:

public class Test23 {
    public static void main(String[] args) {
        String s1 = "hello";
        StringBuffer stringBuffer = new StringBuffer(s1);
        stringBuffer.setCharAt(2,'o');
        System.out.println(stringBuffer);
    }
}

结果如下所示:

 4.reverse:反转字符

代码如下所示:

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

结果如下所示:

2.2StringBuilder

其实StringBuilder与StringBuffer有很多相同的方法。

如下面的代码所示:

public class Test25 {
    public static void main(String[] args) {
        String s = "abcdef";
        StringBuilder stringBuilder = new StringBuilder(s);
        //尾部追加字符append
        System.out.println("-------尾部追加字符append-------");
        stringBuilder.append("hello");
        System.out.println(stringBuilder);
        //获取某个位置上的字符
        System.out.println("--------获取某个位置上的字符---------");
        char ret = stringBuilder.charAt(3);
        System.out.println(ret);
        //设置某个位置上的字符
        System.out.println("---------设置某个位置上的字符-------");
        stringBuilder.setCharAt(2,'o');
        System.out.println(stringBuilder);
        //返回第一次出现指定字符的位置
        System.out.println("-------返回第一次出现指定字符的位置------");
        int d = stringBuilder.indexOf("cd");
        System.out.println(d);
        //将某个区间内的字符返回
        System.out.println("-------将某个区间内的字符返回--------");
        System.out.println(stringBuilder.substring(1, 5));
        //反转字符
        System.out.println("------------反转字符-----------");
        System.out.println(stringBuilder.reverse());
    }
}

结果如下所示:

 

2.3String、StringBuilder和StringBuffer的区别

  • String的内容不可以修改,StringBuffer和StringBuilder的内容可以修改。
  • StringBuilder与StringBuffer大部分功能是相似的。
  • StringBuffer采用的是同步处理,属于线程安全操作,而StringBuilder未采用同步处理,属于线程不安全操作。 

结束语:

好啦这次小编和大家分享到这里啦!这次主要和大家讲了String类的主要用法和Sting是可以改变内容的,但是我们可以通过StringBuilder和StringBuffer来进行改变,希望对大家有所帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!) 

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

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

相关文章

Matplotlib笔记 · 绘图区域的结构和子图布局与划分(figure, axes, subplots)

文章目录1. 绘图区域的结构2. subplot系方法 ( subplot布局 )2.1 使用 add_subplot(nrows, ncols, index) 逐一创建子图2.2 控制子图大小和位置 ( add_subplot(nrows, ncols, index) 参数详解 )2.3 使用 subplots(nrows, ncols) 批量创建多张子图3. axes系方法 ( axes布局 )3.1…

基于张量变换域低秩正则化的图像恢复方法

高光谱图像、磁共振图像、RGB图像等都可以表示成三维数组的形式&#xff0c;在数学上将这种多维数组称为高阶张量&#xff0c;同样&#xff0c;上述三种图像都可以表示成三阶张量。在空间上&#xff0c;图像本身就具有结构相似性&#xff0c;在高光谱图像的第三个模态上&#x…

日志分析工具

iis、windows日志做日志分析比较麻烦&#xff0c;这里找到了一款好用的免费的日志分析工具 Log Parser Lizard&#xff0c;下载这个工具之前建议先安装LogParser虽然他会自动弹窗提示。 1. 安装软件 安装没什么好说的一直下一步下一步就行 启动之后点击OK 弹出激活页面让激活…

mod函数怎么取模

mod 是 MySQL 中的数值函数&#xff0c;写法为&#xff1a;mod(x,y)&#xff0c;意思是返回x/y的取模的值。 什么是取模&#xff1f;取模就是取余数。 ① 如果第一个值比第二个值大&#xff0c;我整理出来的取模公式就是&#xff1a;第一个值-第一个值里面包含了几个第二个值相…

MATLAB-多边形填充图绘制

fill函数用于绘制并填充二维多边图形。将数据点视为多边形顶点&#xff0c;并将此多边形涂上颜色&#xff0c;便于用户理解图形中的数据代表的含义。具体调用方法如下:fill(X, Y,C):用X和Y中的数据生成多边形&#xff0c;用C指定颜色填充。其中C为色图向量或矩阵。若C是行向量&…

商标注册流程有什么步骤

​一、商标注册流程有什么步骤? 商标注册流程&#xff1a; 1、需要企业提供营业执照副本复印件和商标样稿及主要商品或服务&#xff0c;递交商标局; ​ 2、商标局形式审查(7-15个工作日)接到《商标注册申请受理通知书》; 3、商标局实质审查(5-8个月左右); 4、商标公告(3…

【Linux多线程编程】3. 多线程共享资源

回顾 上篇文章【Linux多线程编程】2.线程创建与回收 简单介绍了如何创建一个线程并且回收它&#xff0c;末尾给出了如下这段代码&#xff0c;本文将从这段代码入手介绍线程资源、线程共享资源、线程独占资源&#xff0c;并在最后引出多线程安全访问资源的方法。 /** test_pth…

新华三(H3C)的沉浮往事

根据2023年1月3日紫光股份发布的最新公告&#xff0c;Hewlett Packard Enterprise Company全资子公司H3C Holdings Limited&#xff08;“HPE 开曼”&#xff09;和Izar Holding Co&#xff0c;将向紫光股份全资子公司紫光国际信息技术有限公司出售其持有的新华三集团有限公司合…

【Linux】伪目标 PHONY | 探讨项目构建问题 | Makefile | 依赖关系与依赖方法

&#x1f923; 爆笑教程 &#x1f449; 《看表情包学Linux》&#x1f448; 猛戳订阅 &#x1f525; &#x1f4ad; 写在前面&#xff1a;本章我们要学习的是 makefile。会不会写 makefile&#xff0c;从一个侧面说明一个人是否具备完成大型工程的能力。一个工程中的源文件不计…

Vector - VT System - 板卡_VT1004

今天我们来聊一下导入和测量模块VT1004版本&#xff0c;我们从它的技术参数、通道介绍、功能介绍几个方面来全面的介绍这块板卡&#xff0c;废话不多说&#xff0c;我们直接来看这2块板卡吧。 测量模块 - VT1004 通道功能介绍&#xff1a; >通过继电器切换到原始负载和母线…

Qt扫盲-QSet理论总结

QSet理论总结一、概述二、使用1. 声明2. 插入元素3. 遍历元素4. 删除元素5. 集合的运算6. 其他一、概述 QSet是Qt的通用容器类之一。俗称一个集合。QSet会按未指定的顺序存储值&#xff0c;也就是随机存值的方式&#xff0c;并提供非常快速的值查找。在内部&#xff0c;QSet实…

python学习|第二天

文章目录1.函数函数调用函数返回值函数参数2.bug常见类型粗心类型知识点不扎实思路不清被动掉坑常见异常类型3.文件的读写打开模式文件对象常用方法with方法4.os模块操作目录相关函数5.打包成可执行文件1.函数 函数调用 p89&#xff0c;笔记待补 函数返回值 1&#xff09;如…

微信小程序开发过程整理

目录1微信开发相关介绍1.1微信公众平台1.2微信开放平台1.3注意事项2微信小程序开发整体介绍2.1微信小程序简介2.2小程序接入流程3框架简介3.1uni-app简介3.2学习使用uni-app3.3学习微信小程序开发4开发规范5开发示例5.1开发工具5.2开发调试5.2.1导入代码5.2.2项目运行5.2.3在微…

java常见题3

11.二分查找的次数 奇数取 中间那一个作为中值 偶数个取 中间靠左 然后不断模拟这个算法 查找的最多次数&#xff1a;n个元素里最多查找log二N 个元素Log2 128 7 12.equals和hashCode java.lang.Object类中有两个非常重要的方法&#xff1a; public boolean equals(Obje…

YOLOV5模型训练

之前在博文中讲到了YOLOV5的运行,以及转tensorrt. 但是, 一个模型通常需要结合数据训练,才能得到更好的结果. 因此,我们有必要熟悉yolov5的训练过程. 执行训练的过程 Yolov5的github提供了官方的训练脚本. 第一次运行,会自动下载数据集,然后会检测到你的gpu配置,如果不对,…

【数据结构】树

树(Tree) 知识框架 树的定义 树和图一样都是非线性结构&#xff0c;树是n个结点的有限集合&#xff0c;当n0时&#xff0c;称这棵树为空树。 非空树有以下特征&#xff1a; 有且仅有一个称为根的结点。如果n>1, 除根结点以外其它结点可以分为m(m>0)个不相交的集合T1,T…

E4445A频谱分析仪

18320918653 E4445A 名称&#xff1a;E4445A 频谱分析仪&#xff0c; 3 Hz - 13.2 GHz 详细&#xff1a;主要技术指标 性能 /-0.24 dB幅度精度 -155 dBm/Hz显示的平均噪声电平&#xff08;DNAL&#xff09; 10 kHz偏置时的相噪&#xff1a;-118 dBc/Hz 81 dB W-CDMA AC…

春节倒计时,让我来秀一手:用Python制作一个对联生成器

前言 跨年跨完了&#xff0c;马上就要迎来春节了&#xff0c;这不得秀一手&#xff1f; 那就直接开始春节的表演呗 勉勉强强来用python制作对联生成器吧 效果展示 这里的话&#xff0c;你自己想要啥春联主题是可以搜索滴&#xff0c;有些地方也是可以看着改的&#xff0c;…

FPGA知识汇集-FPGA的低功耗设计方法总结

精确的热分析在很多电子产品设计中都有着举足轻重的作用&#xff0c;在高端的PCB设计中尤为突出。热分析的结果常常会影响PCB的机械层设计和产品的外壳设计:是否需要安装散热片、散热风扇等。如果安装散热风扇&#xff0c;往往需要降低其噪音&#xff0c;这将使得机械层设计变得…

【OpenAI】What Is ChatGPT

文章目录介绍注册介绍 OpenAI发布了一个全新的聊天机器人模型—— ChatGPT&#xff0c;同时这也是继GPT-3.5 系列的主力模型之一 ChatGPT 测试地址&#xff1a; https://chat.openai.com/auth/login https://gpt.chatapi.art/ ChatGPT官方说明&#xff1a; Optimizing Langua…