【JAVA】String 类
⭐ 作者:小胡_不糊涂
🌱 作者主页:小胡_不糊涂的个人主页
📀 收录专栏:浅谈Java
💖 持续更文,关注博主少走弯路,谢谢大家支持 💖
String
- 1. 字符串构造
- 2. String对象的比较
- 3. 字符串查找
- 4. 转化
- 5. 字符串替换
- 6. 字符串拆分
- 7. 字符串截取
- 8. 其他操作方法
- 9. 字符串的不可改变性
1. 字符串构造
String类常用的构造方法:
public class Main {public static void main(String[] args) {// 使用常量串构造String s1 = "hello bit";System.out.println(s1);// 直接newString对象String s2 = new String("hello bit");System.out.println(s1);// 使用字符数组进行构造char[] array = {'h','e','l','l','o','b','i','t'};String s3 = new String(array);System.out.println(s1);}
}
注:
- String是引用类型,内部并不存储字符串本身。
例如:
public static void main(String[] args) {// s1和s2引用的是不同对象 s1和s3引用的是同一对象String s1 = new String("hello");String s2 = new String("world");String s3 = s1;System.out.println(s1.length()); // 获取字符串长度---输出5System.out.println(s1.isEmpty()); // 如果字符串长度为0,返回true,否则返回false
}
上述代码中的s1、s2、s3在虚拟机栈中三者的存储位置都不同,但在堆区中s1和s2所指向的是同一个空间,也就是"hello"的存储空间。
- 在Java中 “” 引起来的也是String类型对象。
例如:
// 打印"hello"字符串(String对象)的长度
System.out.println("hello".length());
2. String对象的比较
字符串的比较是常见操作之一,比如:字符串排序。
Java中总共提供了4中方式:
- ==比较是否引用同一个对象
对于内置类型,== 比较的是变量中的值;对于引用类型 == 比较的是引用中的地址。
例如:
public static void main(String[] args) {int a = 10;int b = 20;int c = 10;// 对于基本类型变量,==比较两个变量中存储的值是否相同System.out.println(a == b); // falseSystem.out.println(a == c); // true// 对于引用类型变量,==比较两个引用变量引用的是否为同一个对象String s1 = new String("hello");String s2 = new String("hello");String s3 = new String("world");String s4 = s1;System.out.println(s1 == s2); // falseSystem.out.println(s2 == s3); // falseSystem.out.println(s1 == s4); // true}
🍤 运行结果:
boolean equals(Object anObject)
方法:按照字典序比较
字典序:字符大小的顺序
String类重写了父类Object中 equals 方法,Object中 equals 默认按照 == 比较,String重写 equals 方法后,按照如下规则进行比较,比如: s1.equals(s2)
public static void main(String[] args) {String s1 = new String("hello");String s2 = new String("hello");String s3 = new String("Hello");// s1、s2、s3引用的是三个不同对象,因此==比较结果全部为falseSystem.out.println(s1 == s2); // falseSystem.out.println(s1 == s3); // false// equals比较:String对象中的逐个字符// 虽然s1与s2引用的不是同一个对象,但是两个对象中放置的内容相同,因此输出true// s1与s3引用的不是同一个对象,而且两个对象中内容也不同,因此输出falseSystem.out.println(s1.equals(s2)); // trueSystem.out.println(s1.equals(s3)); // false}
equal的比较方式:
public boolean equals(Object anObject) {
// 1. 先检测this 和 anObject 是否为同一个对象比较,如果是返回trueif (this == anObject) {return true;}
// 2. 检测anObject是否为String类型的对象,如果是继续比较,否则返回falseif (anObject instanceof String) {
// 将anObject向下转型为String类型对象String anotherString = (String) anObject;int n = value.length;
// 3. this和anObject两个字符串的长度是否相同,是继续比较,否则返回falseif (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;
// 4. 按照字典序,从前往后逐个字符进行比较while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}
int compareTo(String s)
方法: 按照字典序进行比较
equals返回的是boolean类型,而compareTo返回的是int类型。
具体比较方式:
- 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
- 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值
例如:
public static void main(String[] args) {String s1 = new String("abc");String s2 = new String("ac");String s3 = new String("abc");String s4 = new String("abcdef");System.out.println(s1.compareTo(s2)); // 不同输出字符差值-1System.out.println(s1.compareTo(s3)); // 相同输出 0System.out.println(s1.compareTo(s4)); // 前k个字符完全相同,输出长度差值 -3}
int compareToIgnoreCase(String str)
方法
与compareTo方式相同,但是忽略大小写比较,例如:
public static void main(String[] args) {String s1 = new String("abc");String s2 = new String("ac");String s3 = new String("ABc");String s4 = new String("abcdef");System.out.println(s1.compareToIgnoreCase(s2)); // 不同输出字符差值-1System.out.println(s1.compareToIgnoreCase(s3)); // 相同输出 0System.out.println(s1.compareToIgnoreCase(s4)); // 前k个字符完全相同,输出长度差值 -3}
3. 字符串查找
常用查找的方法:
方法 | 功能 |
---|---|
char charAt(int index) | 返回index位置上字符,如果index为负数或者越界,抛出IndexOutOfBoundsException异常 |
int indexOf(int ch) | 返回ch第一次出现的位置,没有返回-1 |
int indexOf(int ch, int fromIndex) | 从fromIndex位置开始找ch第一次出现的位置,没有返回-1 |
int indexOf(String str) | 返回str第一次出现的位置,没有返回-1 |
int indexOf(String str, int fromIndex) | 从fromIndex位置开始找str第一次出现的位置,没有返回-1 |
int lastIndexOf(int ch) | 从后往前找,返回ch第一次出现的位置,没有返回-1 |
int lastIndexOf(int ch, int fromlndex) | 从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返回-1 |
int lastIndexOf(Stringstr) | 从后往前找,返回str第一次出现的位置,没有返回-1 |
int lastIndexOf(String str, int fromlndex) | 从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1 |
实例:
public static void main(String[] args) {String s = "aaabbbcccaaabbbccc";System.out.println(s.charAt(3)); // 'b'System.out.println(s.indexOf('c')); // 6System.out.println(s.indexOf('c', 10)); // 15System.out.println(s.indexOf("bbb")); // 3System.out.println(s.indexOf("bbb", 10)); // 12System.out.println(s.lastIndexOf('c')); // 17System.out.println(s.lastIndexOf('c', 10)); // 8System.out.println(s.lastIndexOf("bbb")); // 12System.out.println(s.lastIndexOf("bbb", 10)); // 3}
4. 转化
- 数值和字符串转化
public static void main(String[] args) {// 数字转字符串String s1 = String.valueOf(1234);String s2 = String.valueOf(12.34);String s3 = String.valueOf(true);System.out.println(s1);//"1234"System.out.println(s2);//"12.34"System.out.println(s3);//"true"System.out.println("=================================");// 字符串转数字// Integer、Double等是Java中的包装类型int data1 = Integer.parseInt("1234");double data2 = Double.parseDouble("12.34");System.out.println(data1);//1234System.out.println(data2);//12.34}
- 大小写转换
public static void main(String[] args) {String s1 = "heLlo";String s2 = "HELLO";// 小写转大写System.out.println(s1.toUpperCase());//HELLO// 大写转小写System.out.println(s2.toLowerCase());//hello}
- 字符串转数组
public static void main(String[] args) {String s = "hello";// 字符串转数组char[] ch = s.toCharArray();for (int i = 0; i < ch.length; i++) {System.out.print(ch[i]);}System.out.println();// 数组转字符串String s2 = new String(ch);System.out.println(s2);}
- 格式化
//格式化public static void main(String[] args) {String s = String.format("%d-%d-%d", 2019, 9,14);System.out.println(s);//2019-9-14}
5. 字符串替换
使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下:
方法 | 功能 |
---|---|
String replaceAll(String regex, String replacement) | 替换所有的指定内容 |
String replaceFirst(String regex, String replacement) | 替换首个内容 |
实例:
public static void main(String[] args) {String str = "helloworld" ;System.out.println(str.replaceAll("l", "_"));//he__owor_dSystem.out.println(str.replaceFirst("l", "_"));//he_loworld}
🍩字符串是不可变对象,替换-不修改当前字符串,而是产生一个新的字符串。
6. 字符串拆分
可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。可用方法如下:
方法 | 功能 |
---|---|
String[] split(String regex) | 将字符串全部拆分 |
String[] split(String regex, int limit) | 将字符串以指定的格式,拆分为limit组 |
实例:实现字符串的拆分处理
public static void main(String[] args) {String str = "hello world" ;String[] result = str.split(" ") ; // 按照空格拆分for(String s: result) {System.out.println(s);}}
🍤 运行结果:
实例:字符串的部分拆分
public static void main(String[] args) {String str = "hello beautiful world " ;String[] result = str.split(" ",2) ;for(String s: result) {System.out.println(s);}}
🍤 运行结果:
🍩有些特殊字符作为分割符可能无法正确切分,需要加上转义。
实例:拆分IP地址
public static void main(String[] args) {String str = "192.168.1.1" ;String[] result = str.split("\\.") ;for(String s: result) {System.out.println(s);}}
🍤 运行结果:
注:
- 字符"|“,”*“,”+"都得加上转义字符,前面加上 “\” 。
- 而如果是 “” ,那么就得写成 “\\” 。
- 如果一个字符串中有多个分隔符,可以用"|"作为连字符。
实例:多次拆分
public static void main(String[] args) {String str = "name=zhangsan&age=18" ;String[] result = str.split("&") ;for (int i = 0; i < result.length; i++) {String[] temp = result[i].split("=") ;System.out.println(temp[0]+" = "+temp[1]);}}
🍤 运行结果:
7. 字符串截取
从一个完整的字符串之中截取出部分内容。可用方法如下:
方法 | 功能 |
---|---|
String substring(int beginIndex) | 从指定索引截取到结尾 |
String substring(int beginIndex, int endIndex) | 截取部分内容 |
实例:
public static void main(String[] args) {String str = "helloworld" ;System.out.println(str.substring(5));System.out.println(str.substring(0, 5));}
🍤 运行结果:
注:
- 索引从0开始。
- 注意前闭后开区间的写法,substring(0,5) 表示包含 0 号下标的字符,不包含 5 号下标。
8. 其他操作方法
方法 | 功能 |
---|---|
String trim() | 去掉字符串中的左右空格,保留中间空格 |
String toUpperCase() | 字符串转大写 |
String toLowerCase() | 字符串转小写 |
实例:trim()方法的使用
public static void main(String[] args) {String str = " hello world " ;System.out.println("["+str+"]");System.out.println("["+str.trim()+"]");}
🍤 运行结果:
🍩trim 会去掉字符串开头和结尾的空白字符(空格、换行、制表符等)。
实例:大小写转换
public static void main(String[] args) {String str = " hello%$$%@#$%world 哈哈 " ;System.out.println(str.toUpperCase());System.out.println(str.toLowerCase());}
🍤 运行结果:
9. 字符串的不可改变性
String是一种不可变对象. 字符串中的内容是不可改变。字符串不可被修改,是因为:
- String类在设计时就是不可改变的,它的内容在创建好之后就不能被修改。
String类中的字符实际保存在内部维护的value字符数组中;
String类被final修饰,表明该类不能被继承;
value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。
- 所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象
final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内
容是可以修改的。
为什么String要设计成不可变的?
- 方便实现字符串对象池。如果 String 可变,那么对象池就需要考虑写时拷贝的问题了。
- 不可变对象是线程安全的。
- 不可变对象更方便缓存 hash code,作为 key 时可以更高效的保存到 HashMap 中。
相关文章:
![](https://img-blog.csdnimg.cn/c05fc0ad5b0e45adaaa8e478890d1ab7.png)
【JAVA】String 类
⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈Java 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 String 1. 字符串构造2. String对象的比…...
![](https://img-blog.csdnimg.cn/img_convert/082457d1093d52c67ce0a6bac024b9a1.png)
LoRA继任者ReLoRA登场,通过叠加多个低秩更新矩阵实现更高效大模型训练效果
论文链接: https://arxiv.org/abs/2307.05695 代码仓库: https://github.com/guitaricet/peft_pretraining 一段时间以来,大模型(LLMs)社区的研究人员开始关注于如何降低训练、微调和推理LLMs所需要的庞大算力…...
![](https://img-blog.csdnimg.cn/img_convert/66e844f9e4befc913c1b758b7e89710a.gif)
Elasticsearch 8.X reindex 源码剖析及提速指南
1、reindex 源码在线地址 为方便大家验证,这里给出 reindex github 源码地址。 https://github.com/elastic/elasticsearch/blob/001fcfb931454d760dbccff9f4d1b8d113f8708c/server/src/main/java/org/elasticsearch/index/reindex/ReindexRequest.java reindex 常见…...
![](https://img-blog.csdnimg.cn/img_convert/7249b94c2dc5dda1ee1ca18dde29a90f.png#?w=926&h=334&e=png&b=ffffff)
前端组件库造轮子——Input组件开发教程
前端组件库造轮子——Input组件开发教程 前言 本系列旨在记录前端组件库开发经验,我们的组件库项目目前已在Github开源,下面是项目的部分组件。文章会详细介绍一些造组件库轮子的技巧并且最后会给出完整的演示demo。 文章旨在总结经验,开源…...
![](https://www.ngui.cc/images/no-images.jpg)
Day04-Vue基础-监听器-双向绑定-组件通信
Day04-Vue基础-监听器-双向绑定-组件通信 一 侦听器 语法一 <template><div>{{name}}<br><button @click="update1">修改1</button><...
![](https://img-blog.csdnimg.cn/a5d6006c20724f6eaaf57f148e724c05.png)
Java小白基础自学阶段(持续更新...)
引言 Java作为一门广泛应用于企业级开发的编程语言,对初学者来说可能会感到有些复杂。然而,通过适当的学习方法和资源,即使是小白也可以轻松掌握Java的基础知识。本文将提供一些有用的建议和资源,帮助小白自学Java基础。 学习步骤…...
![](https://www.ngui.cc/images/no-images.jpg)
Vue自定义指令- v-loading封装
Vue自定义指令- v-loading封装 文章目录 Vue自定义指令- v-loading封装01-自定义指令自定义指令的两种注册语法: 02自定义指令的值03-自定义指令- v-loading指令封装 01-自定义指令 什么是自定义指令? 自定义指令:自己定义的指令,…...
![](https://www.ngui.cc/images/no-images.jpg)
C++中提供的一些关于查找元素的函数
C中提供的所有关于查找的函数 std::find(begin(), end(), key) std::find(begin(), end(), key):这个函数用于在一个范围内查找一个等于给定值的元素,返回一个指向该元素的迭代器,如果没有找到则返回范围的结束迭代器。 1.1 例如ÿ…...
![](https://img-blog.csdnimg.cn/42f55eab8f1846d2ada1692ac50478f9.png)
Wlan——STA上线流程与802.11MAC帧讲解以及报文转发路径
目录 802.11MAC帧基本概念 802.11帧结构 802.11MAC帧的分类 管理帧 控制帧 数据帧 STA接入无线网络流程 信号扫描—管理帧 链路认证—管理帧 用户关联—管理帧 用户上线 不同802.11帧的转发路径 802.11MAC帧基本概念 802.11协议在802家族中的角色位置 其中802.3标…...
![](https://img-blog.csdnimg.cn/d26c9f2ca90340ed88cc03348261a192.png)
Python|爬虫和测试|selenium框架模拟登录示例(一)
前言: 上一篇文章Python|爬虫和测试|selenium框架的安装和初步使用(一)_晚风_END的博客-CSDN博客 大概介绍了一下selenium的安装和初步使用,主要是打开某个网站的主页,基本是最基础的东西,那么,…...
![](https://www.ngui.cc/images/no-images.jpg)
QT的概述
什么是QT Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。 QT项目的创建 .pro文件 .pro 文件是一个Qt项目文件,用于定义…...
![](https://www.ngui.cc/images/no-images.jpg)
Hive 导入csv文件,数据中包含逗号的问题
问题 今天 Hive 导入 csv 文件时,开始时建表语句如下: CREATE TABLE IF NOT EXISTS test.student (name STRING COMMENT 姓名,age STRING COMMENT 年龄,gender STRING COMMENT 性别,other_info STRING COMMENT 其他信息 ) COMMENT 学生信息表 ROW FORM…...
![](https://img-blog.csdnimg.cn/1210557096824c39842642ef7ae8d840.png)
1、Odoo开发起点
1.1.odoo的模块组成 init.py将一个文件夹编程python包manifestpyodoo模块定义的清单文件,用于对odoo模块管理详见model模型类文件,存放py文件security表级别权限管理static静态文件views视图文件。wizard瞬态模型向导文件位置 1.2.odoo的开发规范 非强…...
![](https://www.ngui.cc/images/no-images.jpg)
Ubuntu22.04 交叉编译树莓派CM4 kernel
通过这个文章记录一下如何在Ubuntu22.04编译树莓派CM4的kernel。 主要参考树莓派官网的方法,也总结了一些关于SD卡分区的知识。 1,虚拟机安装Ubuntu 22.04,就不介绍了。 2,先将树莓派官方系统烧录倒SD卡中,设备能正…...
![](https://www.ngui.cc/images/no-images.jpg)
稀疏矩阵搜索(两种方法解决:1.暴力+哈希 2.二分法)
题目: 有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。 示例: 输入: words ["at", "", "", "", "ball", "", &…...
![](https://www.ngui.cc/images/no-images.jpg)
NodeJS系列教程、笔记
NodeJS系列教程、笔记 点我进入专栏 Node.js安装与基本使用 NodeJS的Web框架Express入门 Node.js的sha1加密 Nodejs热更新 Nodejs配置文件 Nodejs的字节操作(Buffer) Node.js之TCP(net) Node.js使用axios进行web接口调用 …...
![](https://img-blog.csdnimg.cn/bbed20210320404882bba58bd261bf5c.png)
4.4TCP半连接队列和全连接队列
目录 什么是 TCP 半连接队列和全连接队列? TCP 全连接队列溢出 如何知道应用程序的 TCP 全连接队列大小? 如何模拟 TCP 全连接队列溢出的场景? 全连接队列溢出会发生什么 ? 如何增大全连接队列呢 ? TCP 半连接队列溢出 如何查看 TC…...
![](https://img-blog.csdnimg.cn/img_convert/21c4e5e848b4d9d25ea207fa47722a44.png)
一键实现 Oracle 数据整库同步至 Apache Doris
在实时数据仓库建设或迁移的过程中,用户必须考虑如何高效便捷将关系数据库数据同步到实时数仓中来,Apache Doris 用户也面临这样的挑战。而对于从 Oracle 到 Doris 的数据同步,通常会用到以下两种常见的同步方式: OGG/XStream/Lo…...
![](https://img-blog.csdnimg.cn/img_convert/a7b759d951afa207f28801c7fc8edeb0.jpeg)
Unity3D软件安装包分享(附安装教程)
目录 一、软件简介 二、软件下载 一、软件简介 Unity3D是一款全球知名的游戏开发引擎,由Unity Technologies公司开发。它提供了一个跨平台、多功能的开发环境,支持创建2D和3D游戏、交互式应用、虚拟现实、增强现实等多种类型的应用程序。以下是Unity3D…...
![](https://img-blog.csdnimg.cn/b4399956242449eb85721d4f3a326e27.png)
Vue2向Vue3过度Vue3组合式API
目录 1. Vue2 选项式 API vs Vue3 组合式API2. Vue3的优势3 使用create-vue搭建Vue3项目1. 认识create-vue2. 使用create-vue创建项目 4 熟悉项目和关键文件5 组合式API - setup选项1. setup选项的写法和执行时机2. setup中写代码的特点3. <script setup>语法糖 6 组合式…...
![](https://img-blog.csdnimg.cn/img_convert/1558f821cacf965270d4c5af7fc66cc3.png)
⛳ Docker 安装 MySQL
🎍目录 ⛳ Docker 安装 MySQL🚜 一、搜索 mysql , 查看版本🎨 二、拉取mysql镜像👣 三、建立容器的挂载文件🧰 四、创建mysql配置文件,my.conf🏭 五、根据镜像产生容器🎁 六、远程连…...
![](https://img-blog.csdnimg.cn/53b49a79baae4d20bb806a1a8944c306.png)
4.6 TCP面向字节流
TCP 是面向字节流的协议,UDP 是面向报文的协议 操作系统对 TCP 和 UDP 协议的发送方的机制不同,也就是问题原因在发送方。 UDP面向报文协议: 操作系统不会对UDP协议传输的消息进行拆分,在组装好UDP头部后就交给网络层处理&…...
![](https://img-blog.csdnimg.cn/84505b82cbd94d72943db3a6b33761ce.png)
uniapp返回上一页并刷新
在uniapp中,经常会有返回上一页的情况,官方提供有 uni.navigateBack 这个api来实现效果,但是此方法返回到上一页之后页面并不会更新(刷新)。 例如有这样一个场景:从地址列表页点击添加按钮进入添加地址页面…...
![](https://www.ngui.cc/images/no-images.jpg)
LRU cache的实现细节优化——伪结点的技巧
LRU cache的实现是面试常见的题目,思路比较简单,可以参考思路 这个题目在实际面试中容易出错,主要是npe和头节点与尾节点的更新,有没有办法避免这一点呢,这时可以发现伪节点的好处,永远不用更新头尾节点&am…...
![](https://img-blog.csdnimg.cn/0063fb3a8f93470195438191bce83553.gif#pic_center)
【C/C++】父类指针指向子类对象 | 隐藏
创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c系列专栏:C/C零基础到精通 🔥 给大…...
![](https://img-blog.csdnimg.cn/2b28c067bc63484db4abb0bd3591e364.png)
NSSCTF——Web题目2
目录 一、[HNCTF 2022 Week1]2048 二、[HNCTF 2022 Week1]What is Web 三、[LitCTF 2023]1zjs 四、[NCTF 2018]签到题 五、[SWPUCTF 2021 新生赛]gift_F12 一、[HNCTF 2022 Week1]2048 知识点:源代码审计 解题思路: 1、打开控制台,查看…...
![](https://img-blog.csdnimg.cn/7c45535769864a7e9edc3ca6d5ef6514.jpeg)
从零到富:探索CSGO搬砖项目的无限可能
在如今互联网时代,有一项令人惊叹的项目正悄然兴起,它就是CSGO搬砖项目。作为一个从零开始的家伙,我亲身经历了这个项目的神奇魅力,每天轻松赚取几十上百的收益,无风险,低成本。今天,我将带领大…...
![](https://www.ngui.cc/images/no-images.jpg)
Uniapp中vuex的使用
vuex的学习笔记,很多地方还都不是很懂,先记下来再说,比小程序里自带的store复杂很多,看着头大,而且方法里面很多ES6的内容,头都看到爆炸 一、初始化vuex 新建store.js,挂载到main.js 1、在根…...
![](https://img-blog.csdnimg.cn/0a7465078f214fb29b05faa92adcca7b.png)
SpringBoot案例-配置文件-参数配置化
前言 目前我们已经完成了部门管理和员工管理功能接口的实现,阿里云OSS工具类中,我们会设置4个参数,分别是云服务域名、云服务ID和密码、文件存储的Bucket、就会存在以下问题:参数配置分散以及参数发生变化,就需要对应…...
![](https://img-blog.csdnimg.cn/d6230877116f488f96707eb658e00048.png)
android系统启动流程之zygote(Native)启动分析
zygote有一部分运行在native,有一部分运行在java层,它是第一个进入java层的进程 zygote在启动时,在init.${ro.zygote}.rc脚本中,里面描述了zygote是如何被启动的, 当init进程解析到zygote.rc文件时,将根据解析出来的命…...
长沙php网站建设/网站访问量
...
![](https://images.cnblogs.com/cnblogs_com/huangweipro/690669/o_pipe2.0.png)
郑州网站模板建设/免费b站推广网址有哪些
目录 译序获取代码关于兼容性的提醒Visual Studio下安装Xcode下安装Linux下安装GLEW, GLFW和GLM介绍什么是Shaders?Vertex ShadersFragment Shaders编译和链接Shaders什么是VBO和VAO?Vertex Buffer Objects (VBOs)Vertex Array Objects (VAOs)代码解释进…...
![](/images/no-images.jpg)
丽水微信网站建设报价/百度知道网址
PV、UV、IP可能各有它们不同的意思,但是当它们出现在一起的时候,多指网站的运营与管理这方面。在这儿小编就为大家分享一下PV、UV、IP分别是什么意思。 网站运营: 1、PV Page View(页面访问量) 又叫做页面浏览量、…...
![](/images/no-images.jpg)
网站建设制作设计seo优化湖南/中级经济师考试
shell中可能经常能看到:echo log > /dev/null 2>&1 命令的结果可以通过%>的形式来定义输出/dev/null :代表空设备文件> :代表重定向到哪里,例如:echo "123" > /home/123.txt1 &#x…...
![](http://www.xtal.cc/UploadFiles/FCK/2018-09/6367183167184182006843252.jpg)
工业产品外观设计公司/如何做网站优化
在无源晶体的设计中,经常遇到负载电容CL的大小取值、晶振设计与精度的提高、KHz无源晶振的停止、音叉晶体谐振器的精度漂移以及精度和无源晶振在高温下的精度是否等于低温的精度烦忧的问题等。 无源晶体振荡器(包括KHz和MHz)是否能够直接参考…...
![](/images/no-images.jpg)
绍兴h5建站/百度电话客服24小时
在Dockerfile中安装Chrome的方法如下: 使用FROM命令指定基础镜像,例如FROM ubuntu:20.04使用RUN命令更新软件包源并安装Chrome的依赖项,例如RUN apt-get update && apt-get install -y libxss1 libappindicator1 libindicator7使用RU…...