立刻有
全部
技术
PHP
MySQL
前端
Linux
JAVA
退出
编辑文章
选择分类
PHP
MySQL
前端
Linux
Java
工具
选择专栏
设计模式
java基础
Angular学习
Java面试题
描述:
封面图上传 :
+
点击上传图片
#### String类型 - String数据类型属于引用数据类型,而前面讲的整型、浮点型、字符型、布尔型属于基本数据类型 - String 类型通过双引号声明”"“ - Stirng 字符串通过 + 号拼接 - 如果int,double和String进行加操作,那么int和double会转为String,进行拼接操作 ```java String a = "abc"; int b =100; double c = 23.0; a = a + b+c; //a= "abc10023" ``` - "\n"表示换行, "\t"表示制表符, "" #### String 对象 - String常量为匿名对象,但是他无需由用户创建,是由系统自动创建的 - String 类型比较通过equals(), - ==和equals的区别,==是数值比较,在String类型中为比较对象的内存地址数值,equals是String类提供的字符串内容比较的方法。 - 直接赋值形式创建字符串对象 ```java String stra = "hello"; String strb = "hello"; String strc = "hello"; System.out.println(stra == strb);//结果true System.out.println(stra == strc);//结果true System.out.println(strb == strc);//结果true ``` 共享设计模式,在JVM的底层,存在要给对象池(不一定之保存String对象),当通过直接赋值的形式创建一个String对象时,会将此字符串对象的匿名对象存入对象池,当下次再次通过直接赋值的形式创建字符串对象,同时字符串的内容和对象池中存入的匿名对象的内容一致时,那么将不会重新开辟堆内存空间,而是继续使用对象池中的对象 - 通过new关键字创建字符串对象 通过new关键字创建的方式,会在堆内存中开辟两块内存空间,其中一块内存空间没有使用,成为垃圾,同时也无法出入对象池,但是可以通过,intern()方法手工入池。 ```java String stra = new String("hello"); String strb = "hello"; System.out.println(stra == strb);//结果false ``` ##### 总结 - 直接赋值方式,只用于一块堆内存空间,且会保存到对象池,当下次再次创建相同内容的对象时,不会开辟新的堆内存空间。 - new方式赋值,会开辟两块堆内存空间,且其中一块时垃圾,同时它不会自动保存到内存池。但是可以通过intern()方法手工入池。 #### 字符串的一些函数 | 方法 | 类型 | 作用 | | ------------------------------------------------------------ | ----------- | ------------------------------------------------------------ | | **[String](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#String-char:A-)**(char[] value) | String构造 | 将char数组转化为字符串 | | **[String](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#String-char:A-int-int-)**(char[] value, int offset, int count) | String构造 | 将char数组安装开始位置和取得长度转化为字符串 | | **[charAt](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#charAt-int-)**(int index) | String方法 | 返回对应位置的字符,其中字符串index从0开始 | | `toCharArray()` | String方法 | 字符串转化为char数组 | | getBytes() | String方法 | 将字符串转化为byte数组 | | public byte[] getBytes(String charsetName) throws UnsupportedEncodingException | String方法 | 将字符串转化为byte数组,同时进行编码转换 | | **[String](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#String-byte:A-int-int-)**(byte[] bytes, int offset, int length) | String构造 | 将byte数组对应的取值范围转化为字符串 | | public boolean contains(CharSequence s) | String方法 | 判断是否包含指定字符,JDK1.5以后的方法 | | public int indexOf(String str) | String方法 | 返回字符串首先出现的位置,找不到返回-1 | | public int indexOf(String str, int fromIndex) | String方法 | 返回从指定位置开始查找到字符串首先出现的位置,找不到返回-1 | | public int lastIndexOf(String str) | String方法 | 返回字符串最后出现的位置,找不到返回-1 | | public int lastIndexOf(String str, int fromIndex) | String方法 | 返回从指定位置开始查找到字符串最后出现的位置,找不到返回-1 | | public boolean startsWith(String prefix) | String方法 | 判断字符串是不是以给定的字符串开始,返回true表示是,false表示不是 | | public boolean endsWith(String suffix) | String方法 | 判断字符串是不是以给定的字符串结尾,返回true表示是,false表示不是 | | public String replaceAll(String regex, String replacement) | String方法 | 用新的字符串,替换所有老的字符串 | | public String replaceFirst(String regex, String replacement) | String方法 | 用新的字符串,替换第一个出现的老的字符串 | | public String substring(int beginIndex) | String方法 | 截取字符串从给的的索引开始 | | public String substring(int beginIndex, int endIndex) | String方法 | 截取字符串从给的的索引开始,到给的索引结束 | | public String[] split(String regex) | String 方法 | 将字符串,通过给定的字符拆分成字符串数组 | | public String[] split(String regex, int limit) | String 方法 | 将字符串,通过给定的字符拆分成字符串数组,同时 limit可以限制拆分个数,比如设置为2,那么如果可拆分的次数大于2,则只拆分2次,如果小于2,则直接为原来的次数 | | 方法 | 类型 | 作用 | | --------------------------- | ----------- | ---------------------------------------- | | public boolean isEmpty() | String 方法 | 当字符串长度为0时返回true,其它返回false | | public int length() | String 方法 | 返回字符串长度 | | public String trim() | String 方法 | 去掉字符串两边的空格,中间的不动 | | public String toLowerCase() | String 方法 | 将字符串转为小写,只对字母,其他字符不转 | | public String toUpperCase() | String 方法 | 将字符串转为大写,只对字母,其他字符不转 | #### 对象比较 - 对象比较方法一般是一个对象的方法 - 要注意对null对象的判断 - 要注意对同意给对象的相等判断
保存文章