赞
踩
String类的实例表示一个字符串, String是一种不可变的字符串, 一旦对这个字符串做出改变的操作, 实质上是重新创建一个新的对象, 然后把引用指向这个新的对象.
//方式一
String str = new String("Hello");
//方式二
String str = "Hello";
问题1. 方式一在内存中创建了几个对象
答: 有可能是一个对象, 有可能是两个对象:
对于"Hello"这个字符串对象, 如果字符串常量池中存在, 那么就在堆中new String一个对象, 指向字符串常量池中的"Hello"字符串对象;
如果字符串常量池中不存在, 那么就会先在字符串常量池中创建一个"Hello"字符串, 然后再在堆中new String一个对象, 指向他.
问题2. 关于 == 问题
详见博客 https://blog.csdn.net/qq_45914985/article/details/106479978
对于== 和equals:
- 在String中重写了equals方法, 用来判断两个变量或者实例指向同一个内存空间的值是不是相同;
- == 是判断两个变量或者实例是不是指向同一个内存空间(如果指向同一个内存空间, 那对应的值就相同)
例如下面这段代码
String str = "hello" ;
str = str + " world" ;
str += "!!!" ;
System.out.println(str);
// 执行结果
//hello world!!!
看起来是拼接str指向的字符串为hello world!!!, 其实并不是这样; 而是str指向了一个字符串常量池中新的对象 hello world!!!
常用的就是contains()
indexOf()需要注意的就是: 如果内容重复, 他只能返回查找的第一个位置
//创建方式: StringBuilder sb = new StringBuilder(); //字符串拼接----append方法 //相当于String中的+的实现功能, 但是没有创建新的对象, 而是直接拼接字符串 sb.append("Hello"); sb.append("World"); //字符串反转----reverse方法 StringBuffer sb = new StringBuffer("helloworld"); System.out.println(sb.reverse()); //插入----insert方法 sb.insert(0, "Java"); //删除----deleteCharAt sb.deleteCharAt(sb.indexOf("J")) //String 与 StringBuilder 转换 //1. StringBuilder 通过toString() 转成String String str = sb.toString(); System.out.println(str); //2. String 转 StringBuilder 通过 StringBuilder 构造器 String ss= "i love you!!!"; StringBuilder sbb = new StringBuilder(ss); System.out.println(sbb);
参考文献
https://blog.csdn.net/weixin_47713805/article/details/106442451
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。