1.String
①:String是不可变的;声明一个String对象,对他进行二次赋值时,实际上
是再次创建了一个String对象
ep:
String s1="Hello";
s1="World";
解释:在s1="Hello",在内存中创建了一个String对象,而在s1="World"时,
又在内存创建了一个对象,而不是用"World"去覆盖"Hello";
②String是一个最终类(final),在src下是这样声明的:
public final class String
③关于String对象之间的比较:
==:String为引用数据类型,所以比较的其实是它的hashCode值
equals:比较的是String的值
ep1:
String s1="Hello"; String s2="Hello";
ep2:
String s1=new String("Hello"); String s2=new String("Hello");
问题:s1==s2?
解释:成立,首先会在内存(字符串常量池)中创建一个"Hello"的对象s1,
然后在创建s2的时候会将s1的值赋值给s2,同时也会将s1的hash值赋值给s2,
所以s1和s2其实指向的是内存的同一块区域,只是他们有着不同的名字;
下面src中String的构造方法可以印证上述所说:
public String(String original) { this.value = original.value; this.hash = original.hash; }
④String类里的常用方法解析(按字母排序):
String中我们需要用到的字段:
/** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0
a)方法一:public char charAt(int index)
public char charAt(int index) { if ((index < 0) || (index >= value.length)) { throw new StringIndexOutOfBoundsException(index); } return value[index]; }
作用:获取string对象中对应下标得字符值(下标是从0开始的)
返回值:char类型的一个字符
解释:如果下标小于0或者下标大于等于字符串的长度,则抛出
字符串下标越界异常(StringIndexOutOfBoundsException),否则
则返回对应下标得字符值;
b)方法二:public int compareTo(String anotherString)
public int compareTo(String anotherString) { int len1 = value.length; int len2 = anotherString.value.length; int lim = Math.min(len1, len2); char v1[] = value; char v2[] = anotherString.value; int k = 0; while (k < lim) { char c1 = v1[k]; char c2 = v2[k]; if (c1 != c2) { return c1 - c2; } k++; } return len1 - len2; }
作用:两个字符串进行比较
返回值:int型,
如果相等,则返回值为0;
如果不等,且相互无子集关系,则返回不同的那两个字符的ASCII码的差值
如果不等, 存在子集关系,则返回两个字符串的长度差
c) 方法三:public String concat(String str)
public String concat(String str) { int otherLen = str.length(); if (otherLen == 0) { return this; } int len = value.length; char buf[] = Arrays.copyOf(value, len + otherLen); str.getChars(buf, len); return new String(buf, true); }
作用:两个字符串进行连接
返回值:连接后的新字符串
解释:如果str为空字符串,则直接返回调用该方法的对象即可
如果不为空字符串,则先建立一个字符数组,调用Arrays.copyOf()方法,
将第一个源字符串的值赋值给字符数组,然后再调用getChars()方法,
将第二个源字符串的值赋值给字符数组,最后返回一个String对象即可;
d)方法四:public boolean equals(Object anObject)
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
作用:对象比较
返回值:如果两个对象的值相等,则返回true,否则返回false;
解释:首先判断两个对象是否为同一个对象,如果是同一个对象则返回true;
然后判断参数对象是否是String的实例,如果不是String的实例,则
返回false,如果是,则倒叙比较String中的每个字符,如果全部相等,
则返回true,否则返回false;
e)方法五:public static String format(String format, Object... args)
public static String format(String format, Object... args) { return new Formatter().format(format, args).toString(); }
作用:格式化字符串
返回值:格式化后的字符串
ep:
String str=null; int year=2016,month=06,day=05; str=String.format("%d-%d-%d",year,month,day); System.out.println(str);
e)方法六:public String trim()
public String trim() { int len = value.length; int st = 0; char[] val = value; /* avoid getfield opcode */ while ((st < len) && (val[st] <= ' ')) { st++; } while ((st < len) && (val[len - 1] <= ' ')) { len--; } return ((st > 0) || (len < value.length)) ? substring(st, len) : this; }
作用:去除前导空格和后到空格
返回值:返回去除空格后的字符串
解释:st从左往右记录不出现空格的下标,len记录从右往左不出现空格的下标,最后根据
下标截取字符串;
相关推荐
各种字符串相似度和距离算法的实现:Levenshtein,Jaro-winkler,n-Gram,Q-Gram,Jaccard索引,最长公共子序列编辑距离,余弦相似度......
北京动力节点-Java编程零基础教程-070-Java基本语法-数据类型-String类型.avi 北京动力节点-Java编程零基础教程-071-Java基本语法-运算符-算术运算基本用法.avi 北京动力节点-Java编程零基础教程-072-Java基本...
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
java-string-similarity, 各种字符串相似性和距离算法 java-string-similarity 实现不同字符串相似度和距离度量的库。 目前已经实现了许多算法( 包括Levenshtein编辑距离和 sibblings,jaro winkler,最长公共子序列...
《Java语言程序设计-基础篇-原书第8版》是一部深入浅出、全面系统地讲解Java编程基础知识的优秀教材,对于初学者和有一定基础的程序员来说,都是一个极佳的学习资源。本书由Cay S. Horstmann与Gary Cornell共同编写...
"mysql-connector-java-5.1.7-bin.jar" 文件就是这个桥梁,它是一个Java归档(JAR)文件,包含了MySQL JDBC驱动的所有必要组件。 MySQL JDBC驱动,也被称为MySQL Connector/J,允许Java应用程序通过遵循JDBC API来...
Java基础加密组件--BASE64加密 使用方法: //加密 String a = EdptByBase64.encryptBASE64("/**/;pas58"); System.out.println(a); //还原 System.out.println(EdptByBase64.decryptBASE64(a)); 具体源码请参见: ...
将要使用的是mysql-connector-java-5.1.30-bin-g.jar和mysql-connector-java-5.1.30-bin.jar 配置 在C:\Program Files\Java目录下建立mysqlforjdbc子目录,进入该目录将mysql-connector-java-5.1.30-bin.jar到该...
本文将对Java中正则表达式的基础概念和常用语法进行详细解释。 1. **元字符和转义字符**: - `\`:反斜杠用于转义特殊字符,如`\t`表示制表符,`\n`表示换行,`\r`表示回车。 - `\d`:匹配数字,等同于`[0-9]`。 ...
《MySQL数据库连接器Java驱动详解——mysql-connector-java-5.1.10-bin.jar》 MySQL数据库在软件开发中占据着重要的地位,而与之交互的Java应用程序通常依赖于`mysql-connector-java`这个数据库驱动。本文将深入...
本知识点将详细讲解如何实现这个功能。 首先,我们需要理解字符串在Java中的本质。在Java中,字符串是不可变的对象,由`String`类表示。这意味着一旦创建了一个字符串对象,它的内容就不能被修改。因此,如果我们要...
### Java基础知识笔记详细版-菜鸟翻阅必备 #### 一、Java概述 1. **Java语言发展史**: - Java由Sun Microsystems公司于1995年推出。 - 最初由James Gosling领导的设计团队开发,目标是用于家用电器的编程。 - ...
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
String3.1-java堆和栈---马克-to-win java视频 马克Java社区 马克towin
### JavaWeb基础知识汇总 #### 一、Java Web入门概述 - **C/S(Client/Server,客户端/服务器)结构** - 客户端需要安装特定的软件才能与服务器通信。 - 数据交互通常需要通过特定的应用程序进行。 - **B/S...
标题中的"mysql-connector-java-5.1.47-bin.jar"正是这个驱动程序的一个特定版本,5.1.47是其版本号,表示这是一个较旧但仍然广泛使用的稳定版本。 在Java编程中,当你需要在应用程序中连接到MySQL数据库时,这个...
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
【Java核心知识总结-笔记】 JavaSE高级部分的讲解涵盖了重要的String类、集合以及IO流。String类在Java中扮演着至关重要的角色,因为它是最常用的数据类型之一,用于存储和处理文本信息。以下是对String类的详细...