4.JAVA-数组、String详解
1.数组
public class Test{
public static void main(String args[]){
int[] intArray = new int[] {1,4,3,2,5};//等价于 : int intArray[] = new int[] {1,2,3,4,5};
System.out.println(intArray.length); //打印长度
//使用java.util.Arrays工具类 来操作 数组
System.out.println(java.util.Arrays.toString(intArray));//打印内容
java.util.Arrays.sort(intArray); //排序
System.out.println("4="+java.util.Arrays.binarySearch(intArray,4));//通过2分查找4所在的位置(必须先排序才行)
System.out.println(java.util.Arrays.toString(intArray));//打印内容
//初次之外java.util.Arrays类还有:
//copyOf():复制
//copyOfRange():指定具体范围复制
//equals():判断两个数组是否相等
//fill():填充某个值
//hashCode():根据数组内容返回哈希码
}
}
2.二维数组
初始化的一般为3种:
int[][] arr1 = {{1,2}, {2, 3}, {4, 5}};
int[][] arr2 = new int[5][5];
int[][] arr3 = new int[5][]; //这种则需要使用的时候再去new一次,否则无法确定二维大小
示例:
public class Test{
public static void main(String args[]){
int[][] arr3 = new int[5][];
for(int i=0; i<arr3.length; ++i) {
arr3[i] = new int[i + 1];
for (int j = 0; j < arr3[i].length; ++j)
arr3[i][j] = i + j;
}
for(int i=0; i<arr3.length; ++i)
System.out.println(java.util.Arrays.toString(arr3[i]));
}
}
打印:

3.String类
java中的String采用共享设计模式(后续会讲),都存在string池中,存储的是常量字符串.
string常量字符串的说明可以看第2章说明:2.JAVA-基础语法以及String的介绍
3.1 String两种实例化说明
String strA = "123"; //只会在string池中创建"123"常量字符串
String strB = new String("123"); //由于string池中已经有了"123",所以只在堆空间分配一段内存来存储"123",然后使strB引用它.
strA = "124"; //在string池中创建"124"并返回这个地址,并且将之前的"123"视为垃圾,等待回收站释放.
3.2 ==和equals()的区别
- == : 用来判断String的内存地址是否相等
- equals(): 用来判断两个String的字符串内容相等
示例:
String strA = "123"; //在string池中创建"123"字符串,并返回这个引用
String strB =strA; //strB和strA相等
String strC = "1" + "23"; //strC="123",由于string池中已经有了"123",所以直接让strA=strB=strC
String strD = new String("123"); //可能会分配两块空间,1:首先会去string池中寻找"123"字符串,如果存在则直接调用,否则在池中创建"123".
//2:然后在堆空间创建"123"的一段内存,使strD引用它.
//3: 最后再去判断string池中的"123"是否被其它对象使用,如果没有,则视为垃圾,等待释放.
System.out.println("strA == strB:"+(strA==strB));
System.out.println("strA == strC:"+(strA==strC));
System.out.println("strA == strD:"+(strA==strD));
System.out.println("equals:"+strA.equals(strD));
打印如下:

3.3 String的共享设计模式
我们先将上个示例对应的图画出来,如下所示:

如上图所示.在JVM底层上是有一个string池(同样也有其它类似的池),当代码中使用了直接赋值的方式定义一个string对象时,会将此字符串对象所使用的匿名对象进行入池保存,而后面如果又重新定义String对象,并且设置相同内容时,那么将不会在String池开辟新空间,而是继续使用,这种模式叫做共享设计模式.
3.4 String的new实例化之手工入池
String有一个intern()方法,可以使new实例化实现手工入池,intern方法定义如下:
public String intern();
//在string池中寻找等于此string的字符串,如果字符串存在,则返回池中的字符串,否则,在池中创建字符串后再返回池中的字符串.
示例如下:
String strA = new String("123").intern(); //在堆空间创建"123"的一段内存.并且将"123"入池,然后返回池中的"123"所在的位置
String strB = "123"; //返回池中的"123"所在的位置
System.out.println(strA==strB); //打印true
打印如下:

3.5 String之其它常用成员方法
String str="hello world 我";
char[] data = str.toCharArray(); //将String转为char
System.out.println(str.charAt(2)); //返回小标处2的char值,返回l
System.out.println(str.codePointAt(11)); //返回小标出11(“我”)的Unicode码
String str1 = str.concat("是NQIAN"); //将str和"是NQIAN"进行连接,并返回给str1
System.out.println(str1);
System.out.println( str.compareTo("hello.") ); //将"hello world 我"和"hello"按ASC表进行比较
// 如果str大于"hello."返回正数,相等返回0,小于返回负数
System.out.println( str.compareToIgnoreCase ("hello.") ); //忽略大小写比较两个字符串
System.out.println( str.contains("he") ); //判断str里是否包含"he"字符,包含返回true,否则返回false
System.out.println( str. startsWith("he") ); //如果str是以"he"开头,返回true,否则返回false
System.out.println( str.endsWith("he") ); //如果str是以"he"结尾,返回true,否则返回false
System.out.println( str.equals("hello world 我") ); //判断两个字符串内容是否相等,返回boolean类型
System.out.println( str.equalsIgnoreCase ("hello world 我") ); //忽略大小,判断两个字符串内容是否相等
System.out.println( str.format("str1:%03d %03f %s",75,5.234,"format") );
//类似于sprintf(),打印"str1:075 5.23400 format",需要注意:并不会改变对象本身内容,str的值还是为:hello world 我
System.out.println( str.hashCode () ); // 返回str的哈希值(内容不同的字符串,哈希值都不同)
System.out.println( str. indexOf ("e")); //从头查找出现e字符的位置,所以返回1,如果未找到返回-1
System.out.println( str. indexOf ("ld",4)); //从下标4处查找出现"ld"的位置并返回,如果未找到返回-1
System.out.println( str. lastIndexOf ("e")); //从尾部向前查找出现e字符的位置并返回,如果未找到返回-1
System.out.println( str. lastIndexOf ("o",5)); //从下标4处尾部向前查找出现"o"的位置,所以返回4
System.out.println( str. length ()); //返回String长度
System.out.println( str. isEmpty ()); //判断是否为空
System.out.println( str. replace("l","o")); //将字符串中的l替换为o,所以打印" heooo worod 我"
String[] arrStr = str. split(" "); //以" "来拆开字符串,所以arrStr[0]="hello",arrStr[1]="world", arrStr[2]="我"
System.out.println( str. substring(1,5)); //返回str的内容下标1~4的串(不包括5),所以打印:ello
System.out.println( str.toLowerCase()); //返回str的小写内容
System.out.println( str. toUpperCase()); //返回str的大写内容
System.out.println( " adc ABC ". trim ()); //trim修剪字符串头和尾部的空格,所以打印:"abc ABC",注意:如果头尾的字符小于空格的话,也会被修剪掉的.
System.out.println( str.valueOf(true)); //返回true对应的字符串,也就是"true",当然valueOf也满足int,double等参数
下章学习:5.JAVA-内部类实例
4.JAVA-数组、String详解的更多相关文章
- Java的String详解
Java的String详解 博客分类: Java javaStringString详解常用方法 Java的String类在开发时经常都会被使用到,由此可见String的重要性.经过这次认真仔细的学习 ...
- 最新java数组的详解
java中HashMap详解 http://alex09.iteye.com/blog/539545 总结: 1.就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java ...
- 浅析Java 数组-基础详解
什么是数组:数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java 数组:用来存储固定大小的同类型元素. 一 声明.创建,初始化Java 数组 写在前面 ...
- [转]Java数组初始化详解
一维数组1) int[] a; //声明,没有初始化 2) int[] a=new int[5]; //初始化为默认值,int型为0 3) int[] a={1,2,3,4,5}; ...
- Java字符串String详解
1.String字符串 实例化String对象: (1)直接赋值,如:String str="hello"; (2)使用关键字 new,如:String str=new Strin ...
- JAVA IO 类库详解
JAVA IO类库详解 一.InputStream类 1.表示字节输入流的所有类的超类,是一个抽象类. 2.类的方法 方法 参数 功能详述 InputStream 构造方法 available 如果用 ...
- 【转】 java中HashMap详解
原文网址:http://blog.csdn.net/caihaijiang/article/details/6280251 java中HashMap详解 HashMap 和 HashSet 是 Jav ...
- java中HashMap详解(转)
java中HashMap详解 博客分类: JavaSE Java算法JDK编程生活 HashMap 和 HashSet 是 Java Collection Framework 的两个重要成 ...
- java集合(2)- java中HashMap详解
java中HashMap详解 基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 H ...
- java集合框架详解
java集合框架详解 一.Collection和Collections直接的区别 Collection是在java.util包下面的接口,是集合框架层次的父接口.常用的继承该接口的有list和set. ...
随机推荐
- (ospf、rip、isis、EIGRP)常见的动态路由协议简介
路由器要转发数据必须先配置路由数据,通常根据网络规模的大小可设置静态路由或设置动态路由.静态路由配置方便,对系统要求低,适用于拓扑结构简单并且稳定的小型网络.缺点是不能自动适应网络拓扑的变化,需要人工 ...
- Android 开发TCP协议时,报错NetworkOnMainThreadException
设想是通过Android应用连接PC的TCP服务器,通过点击按钮连接服务器, 最终在点击按钮后报错:networkonmainthreadexception 解决办法: 在MainActivity文件 ...
- Netty中的连接管理
连接管理是我们首先需要关注的,检测空闲连接以及超时对于及时释放资源来说是至关重要的.由于这是一项常见的任务,Netty特地为它提供了几个ChannelHandler实现. 用于空闲连接以及超时的Cha ...
- 【转】怎么解决java.lang.NoClassDefFoundError错误 ,以及类的加载机制
转自http://blog.csdn.net/jamesjxin/article/details/46606307 前言 在日常Java开发中,我们经常碰到java.lang.NoClassDefFo ...
- centos7搭建postfix邮件服务器
在使用qq等邮件服务器厂商提供的邮件服务后,发现他们的邮件发送数量是有限制的,随着公司的业务的需求下,我们需要搭建一个邮件服务器,邮件服务器可以帮助我们在一些提醒方面和消息推送方面起到帮助. 理论性语 ...
- sql server 高可用故障转移(上)
群集准备工作 个人电脑 内存12G,处理器 AMD A6-3650CPU主频2.6GHz 虚拟机 VMware Workstation 12 数据库 sql server 2008 r2 三台虚拟服 ...
- Kali Linux安装VMWare Tools
操作环境: 虚拟机操作系统: Kali Linux 2017.2 虚拟化软件: VMWare workstation 14 pro 加载光盘 在VMWare上依次点击"虚拟机->安装V ...
- Node.js 专题
前提电脑中已经安装过NodeJS, npm.现在需要进行升级操作.1.查看当前的npm和NodeJs的版本: C:\Users\Administrator>node -v v4.4.3 C:\U ...
- javascript 数组以及对象的深拷贝(复制数组或复制对象)的方法
前言 for,slice(0),concact() 在js中,数组和对象的复制如果使用=号来进行复制,那只是浅拷贝.如下图演示: 如上,arr的修改,会影响arr2的值,这显然在绝大多数情况下,并不 ...
- BZOJ_2721_[Violet 5]樱花_数学
BZOJ_2721_[Violet 5]樱花_数学 Description Input Output $\frac{1}{x}+\frac{1}{y}=\frac{1}{m}$ $xm+ym=xy$ ...