常用API-2(字符串与数组)
1.字符串的生命与初始化主要有一下两种情况:
- String s1=new String("abc"); String s2=new String("abc");
- 存在两个引用对象s1和s2,两个内容相同的字符串对象“abc”
- 它们哎内存中的地址时不同的;
- 只要用到new总会生成新的对象。
- String s1="abc"; String s2="abc";
- 在JVM中存着一个字符串池,其中保存着和多String对象,并且可以被共享使用;
- s1和s2引用的是同一个常量池中的对象;
- 创建s1时,会在字符串常量池中查找是否已经有相同的字符串被定义,其判断依据是equals(Object obj)方法的返回值。
- 若已经定义,则直接获取对其的引用,此时不需要创建新的对象;
- 若没有定义,则首先创建这个对象,然后把它加入到字符串常量池中,再将它的引用返回。
String s1="abc";
String s2="abc";
String s3=new String("abc");
String s3=new String("abc");
s1:在常量区存放了一个“abc”字符串对象;
s2:引用常量区的对象,不创建新对象;
s3:在堆中创建新的对象;引用常量区的“abc”字符串对象。
s4:在堆中创建新的对象;引用常量区的“abc”字符串对象。
String的实现采用了Flyweight的设计模式。
String类是不可变类。一旦创建好了就不可修改,所以String对象可以被共享而且不会导致程序混乱。
String s=null; s是一个字符串引用,不知想任何一个字符串;
String s=" "; s是一个字符串类型的引用,指向另外一个字符串(空串)
new String("abc");创建了几个对象?
一个或两个。如果常量池原来有“abc”,那么只创建一个。如果没有,那么就会创建两个。
2.==、equals和hashCode()
1)==
用来比较两个变量的值是否相等。
比较变量对应的内存中所存储的数值是否相同。
比较两个基本类型的数据或者两个引用变量是否相等,只能用==。
- 基本类型:直接使用==比较;
- 引用类型:涉及两块内存,对象本身(s)占用一个堆内存,变量(new String())占用一块内存。变量s所对应内存中存储的数值就是对象占用的那块内存的首地址。如果要比较两个变量是否指向同一个对象,就要看这两个变量所对应内存中的数值是否相等(这两个变量是否指向同一个对象)。但是==无法实现对象内容的比较。
2)equals
Object提供的方法之一。
Object中的equals(Object)直接使用==运算符比较两个对象。
在没有覆盖equals(Object)时,它与==一样,比较的是引用。
==不能被覆盖,但是equals(Object)可以,可以通过覆盖的方法让它比较数据内容。
String中的equals(Object)是用于比较两个独立对象内容是否相同。
3)hashCode()
继承于Object,用于鉴定两个对象是否相等。
Object类总的hashCode()返回对象在内存中地址转换成的一个int值。
若没有重写hashCode()则任何对象的hashCode()都是不相等的。
一般在覆盖equals方法时也要覆盖hashCode方法。否则就会违反Object.hashCode约定。
3.可对字符串操作的类String、StringBuffer、StringBuilder和StringTokenizer
Character | 处理单个字符 | |||
String | 处理字符串 | 不可变 | 适合共享 | |
StringBuffer | 处理字符串 | 可变 | 适合频繁修改 | 多线程 |
StringBuilder | 处理字符串 | 可变 | 频繁修改 | 单线程 |
StringTokenizer | 分割字符串 | 根据“ \t\n\r\f”分割(5种,有空格) |
实例化String时,可利用构造函数(String s1=new String("world");)进行初始化,也可用赋值(String s="Hello";)初始化。
实例化StringBuffer时,只能用构造函数(StringBuffer s=new StringBuffer("Hello");)进行初始化。
String字符串的修改原理:
- 首先创建一个StringBuffer;
- 其次调用StringBuffer的append();
- 最后调用StringBuffer的toString()返回结果。
String s="Hello";
s+="World";
以上代码等价于
StringBuffer sb=new StringBuffer("Hello");
sb.append("World");
s=sb.toString();
执行效率低。
执行效率方面:
StringBuilder最高,StringBuffer次之,String最低。
- 操作数据量比较小,用String;
- 单线程操作大量数据,用StringBuffer;
- 多线程操作大量数据,用StringBuilder.
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
然而由于 StringBuilder 的方法不是线程安全的(不能同步访问),在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
4.数组
具有相同类型的数据的集合,一般具有固定的长度,并且在内存中占据连续的空间。
(ArrayList就是动态数组,也是一个对象。创建一个ArrayList对象,该对象存放在堆内存中,且是一个内存连续的内存区域。)
一维数组的声明方式:
type arrayName[]
type[] arrayName
- type既可以是基本的数据类型,也可以是类。
- 数组被创建后会根据数组存放的数据类型初始化成对应的初始值。
- Java数组在定义时,并不会给数组袁术分配存储空间,因此[ ]中不需要指定数组的长度。
定义数组且必须分配空间的方法为:
arrayName=new type[arraysize]
数组初始化方法:
1.int[] a=new int[5];//默认初始化为0
2.int[] a={1,2,3,4,5};
使用时可以将数组的生命和初始化分开写。
二维数组的声明方法:
1) type arrayName[][];
2) type[][] arrayName;
3) type[] arrayName[];
注:声明二维数组时,其中的[ ]必须为空。
二维数组的初始化:
type arranName[][]={{c11,c12,c13,...}.{c21,c22,c23,...},{...}...};type arrayName[][]-new type[行数][列数]
其中,二维数组的第二维长度可以不同。
二维数组的访问:
arrayName[行号][列号]
原生类:未被实例化的类。
数组一般指实例化、被分配空间的类,不是原生类。
5.length属性和length()
length属性:数组的
length():字符串的
size():计算对象大小的。查看泛型中有多少个元素。
泛型:对Java语言的类型系统的一种扩展,一直创建可以按类型进行参数化的类,可以把类型参数看做是使用参数化类型时执行的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。
常用API-2(字符串与数组)相关推荐
- Java核心类库之(常用API、字符串类、集合类、泛型)
目录 1 常用API 1.1 Math类 1.2 System类 1.3 Object类 1.4 Objects类 1.5 Arrays类 1.6 基本类型包装类 1.6.1 Integer类概述和使 ...
- 常用API、static、数组复制、双色球练习与酒店管理系统
目录 JDK中的类(API -> 应用程序接口,工具-类) 学习类 接触过的类 软件包package: 常用类[一] 1.Random: 构造方法 new Random() 2.String - ...
- php中数据类型、数组排序、循环语句、混编、操作本地文件流程、常用API、函数、魔术常量
php中数据类型: php中有7种数据类型,分别是: //1.String字符串,用引号包裹的字符,如:$str = 'hello word';//2.Integer整型,可以是正数或负数,有十进制. ...
- 丁鹿学堂:js字符串转数组常用方法总结
我们在前端实际开发过程中,用的最多的是数组.而且js也为数组提供了大量的api,方便我们处理数据. 在实际开发过程中,我们经常需要做的一点就是把字符串转为数组,利用数组的数据结构和api,可以很方便的 ...
- 软件破解中常用API
原生程序开发者,破解也是会用的,这里转载一些资料: 在软件破解中,常用软件破解方法就是下断点快速找事件,在命令行BP下断点,shift+f9找事件然后再alt+f9返回. 快捷方法,ctrl+A分析代 ...
- 破解必备,软件破解中常用API函数大全
在软件破解中,常用软件破解方法就是下断点快速找事件,在命令行BP下断点,shift+f9找事件然后再alt+f9返回. 快捷方法,ctrl+A分析代码.ctrl+N 找要下断的API函数.右键> ...
- java中常用API、Scanner类、匿名对象、Random类、ArrayList类、对象数组
java中常用API: API:Application Programming Interface,应用程序编程接口.Java API是JDK中提供给我们使用的类的说明文档.这些类将底层的代码实现封装 ...
- 辟邪剑法之字符串常用API
辟邪剑法之字符串常用API 文章目录 辟邪剑法之字符串常用API 一.引言 二.字符串 1.字符串介绍 2.ES5字符串方法 1.toLowerCase() 2.toUpperCase() 3.ind ...
- JavaScript基础(四)对象、数组、对象与数组的常用API
目录 一.对象 1. 对象的创建 2. 对象属性的访问 3. 遍历对象属性 4. 检测属性是否存在 5. 对象的方法 二.数组对象 1. 数组的创建 2. 访问数组 3. 数组长度 4. 数组的遍历 ...
最新文章
- 你的每个哈欠老板都知道!被AI摄像头全天盯紧,亚马逊快递小哥不干了
- 单例模式 之 单例模式——饿汉模式
- python ipython spyder
- 「版权流氓」终结者:6天时间,堆出687亿段旋律
- jaxp的Sax解析
- 计算机技术+智能化水电站,水电工程BIM用太少?水电工程BIM案例全解读
- android开发之shape详解
- 湖南(包括岳阳)的交通规划
- 周鸿祎卸任奇安信董事 后者具备上市条件
- axios_json-server的介绍与服务器搭建---axios工作笔记002
- python webservices_python实现webservices接口并调用
- mongodb 启动 WARNING: soft rlimits too low, transparent_hugepage/enabled is 'always'. never
- talib安装error: Microsoft Visual C++ 14.0 or greater is required. Get it with Microsoft C++ Build的解决方案
- python 输入整数数组_Python 2中的整数数组输入
- csgo控制台所有代码飞天_CSGO控制台指令汇总
- Emscripten 单词_背单词分享 | 我觉得实用的背单词方法
- android本地视频 投屏,小米投屏神器
- Excel:动态图表展示(点击按钮选择不同的员工名字,自动呈现对应的数据展示)
- 计算机应用蘑菇丁周报,蘑菇钉周记(共10篇)
- 深度学习 warmup 策略
热门文章
- IBM推出云深度学习图形芯片Tesla P100 GPU加速器
- HttpClient 讲解 (2) 项目封装
- yum与rpm的详解 --用来安装软件
- WPF学习开发客户端软件-任务助手(下 2015年2月4日代码更新)
- 【转】使用Windows Backup备份Exchange 2007 SP2和Exchange 2010
- 在对人的管理上,项目经理应该做些什么?
- vlan间ACL和VACL的区别
- 装好了ubuntu,w2k却无法启动了,:(
- Pytorch中图像预处理相关函数
- 小白html图片添加文字,小白爬虫入门——爬取图片和文字(超详细)