2021-03-12

深入了解java中的String-字符串

字符串介绍

1.String特性

  • String是标准的不可变类,对它的任何改动,其实就是创建一个新对象,再把引用指向对象
  • String对象创建就会在常量池中缓存,如果下次创建会判定常量池是否已经有缓存对象如果有就直接返回引用给创建者

2.字符串创建

字符串创建的方式有两种

  • String str= "wangwu";
  • String str = new String("wangwu");

3.注意事项

代码如下

 	String s1 = "laowang";  String s2 = s1;  String s3 = new String(s1);  System.out.println(s1 == s2);//ture  System.out.println(s1 == s3);//false

原因是s3使用new String 时一定会在堆中创建一个内存区域,s2则会直接使用了s1的引用所以才是结果不同

字符串的拼加

1.字符串拼加的几种方式

  • String str= "lao"+"wang";
  • String str="lao";Str+="Wang";
  • String str = "lao"; String str2 = str + "wang";
    2.jvm对字符串的优化
    根据前面的知识我们知道,对于String 的任何其实是创建 一个新对象,然后再把引用地址返回对象但是jvm也会String
    进行特殊处理以来提供程序运行效率比如以下代码:
String str ="hi,"+"lao" +"wang";经过jvm优化后的代码是这样的String str ="hi,laowang";String str = "hi," + "lao" + "wang";String str2 = "hi,laowang";System.out.println(str == str2);//true

3.字符串的方法帮助文档

常用的方法:concat();把两个字符串拼接起来,获取一个新的字符串 String s1 = "laowang"; String s2 = s1; String s4= new String(s1); String s3=s2+s1;System.out.println(s2.equalsIgnoreCase(s1));\\ture//比较两个字符串的内容是否相同。 //忽略大小写System.out.println(s1.charAt(3));//w-->从0开始数,给定的索引获取对应位置的字符System.out.println(s1.indexOf("g"));//6-->获取指定的字符 在字符串中 第一次出现的位置(索引),找不到返回-1System.out.println(s1.lastIndexOf('a'));//4-->获取指定的字符 在字符串中 最后一次出现的位置(索引),找不到返回-1System.out.println(s1.substring(2)); //从给定索引,直接截取到字符串末尾System.out.println(s1.substring(2,2));//空值System.out.println(s1.isEmpty());//false 判断是否为空System.out.println(s1.contains("lao"));//true 判断字符串中是否包含给定的字符串System.out.println(s1.endsWith("ang"));//true 判断是否是是以该结伟System.out.println(s1.startsWith("ao"));//false 判断是否是该开关System.out.println(s1.replace("a", "g"));//前面是被换的值->lgowgngtoLowerCase(); //把字母都转成其对应的小写形式。toUpperCase(); //把字母都转成其对应的大写形式。toCharArray() // 把字符串转换为数组getBytes() // 把字符串转换为字节数组  ★trim();   //移除首尾空格。★split(); //根据给定的内容,切割字符串,返回字符串数组。。。。后面几个自己试吧

4.字符串格式化

字符串格式化可以让代码更简洁更直观,比如,"我叫老王,今年 30
岁,喜欢读书"在这条信息中:姓名、年龄、兴趣都是要动态改变的,如果使用"+"号拼接的话很容易出错,这个时候字符串格式化方法 String.format()
就派上用场了,代码如下:

String str = string.format("我叫%s,今年%d岁,喜欢%s","老王",30,"读书")

转换符 | 说明

---|---

%s | 字符串类型

%d | 整数类型(十进制)

%c | 字符类型

%b | 布尔类型

%x | 整数类型(十六进制)

%o | 整数类型(八进制)

%f | 浮点类型

%a | 浮点类型(十六进制)

%e | 指数类型

%% | 百分比类型

%n | 换行符

5.字符对比 equals解读

equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。所以重写的方法会取出地址的值然后比较所以引用也相等下面的String源码

public boolean equals(Object anObject) { if (this == anObject) {  return true; } if (anObject instanceof String) {//判断是否是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;}

小伙伴们一起加油吧!今天就到这里了









原文转载:http://www.shaoqun.com/a/619654.html

跨境电商:https://www.ikjzd.com/

rakuten:https://www.ikjzd.com/w/2718

拍拍网服装:https://www.ikjzd.com/w/2205


字符串介绍1.String特性String是标准的不可变类,对它的任何改动,其实就是创建一个新对象,再把引用指向对象String对象创建就会在常量池中缓存,如果下次创建会判定常量池是否已经有缓存对象如果有就直接返回引用给创建者2.字符串创建字符串创建的方式有两种Stringstr="wangwu";Stringstr=newString("wangwu");
acedota:https://www.ikjzd.com/w/2070
文化衫事件:https://www.ikjzd.com/w/1932
custommade:https://www.ikjzd.com/w/2514
重磅干货!各国进口关税查询网站大全!:https://www.ikjzd.com/home/23143
看过来!洋码头开启"黑五"大促 116秒成交额破亿元!:https://www.ikjzd.com/home/111310
下单还是给钱?卖家账号危在旦夕,无良供应商趁火打劫:https://www.ikjzd.com/home/114605

No comments:

Post a Comment