JAVA中String介绍及常见面试题小结

 更新时间:2020年02月26日 15:34:05   作者:辰兮要努力  
这篇文章主要介绍了JAVA中String介绍及常见面试题,在java面试中经常会被面试官问到,小编通过实例代码相结合给大家详细介绍,需要的朋友可以参考下

字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

深刻认识String

1)String为字符串常量:即String对象一旦创建之后该对象是不可更改的。(源码如下)

 String str1 = "abc";
    String str2 = "abc";
    String str3 = new String("abc");
    System.out.println(str1 == str2);
    System.out.println(str1 == str3);

运行结果

true
false

  • ==比较基本数据类型的时候比较的是值,比较引用类型的时候比较的是地址值。这里是比较的引用类型。
  • 创建“abc”的时候先到常量池看看有没有,没有的话就创建一个,有的话就直接用。所以str1和str2的存的地址值相同,指向的是同一个。
  • 因为str3为new出来的对象,new出来的在堆中,而str1在常量池中,所以地址值不可能相等,所以是false。

2)How many Objects created with: String str=new String(“abc”)?

 String str=new String("abc");

答:创建了两个对象 一个在堆 一个在常量池

执行“abc”的之后在常量池创建一个,new的时候在堆里创建一个,并把常量池中的“abc”复制了一份过去。然后将其引用赋给了s1。

3) 补充案例

 String s1 = "a" + "b" + "c";// 在编译时就变成 abc 常量池中创建abc
 String s2 = "abc";
 System.out.println(s1 == s2);// true java中有常量优化机制
 System.out.println(s1.equals(s2));// true

在编译时就变成 abc 常量池中创建abc ,两个都在常量池中

    String s1 = "ab";
 String s2 = "abc";
 String s3 = s1 + "c";
 System.out.println(s3 == s2);// false
 System.out.println(s3.equals(s2));// true 

因为这里s3相当于new出来的,对应地址在堆中,s2在对应地址在常量池中

Spend a little more time trying to make something of yourself and a little less time trying to impress people.
2020.02.25

知识点补充:

String 常见的十种方法

public class ZiFuChuan {
public static void main(String[] args) {
ZiFuChuanFangFa f=new ZiFuChuanFangFa();
f.IndexOf();  //1.字符串查找 注意空格在数组中的位置!字符串查找 indexOf(); 找不到就返回 -1 有就返回此元素在该数组中的角标位置
f.chartAt();  //2.获取指定位置的字符
f.substring01(); //3.获取子字符串!
f.substring02(); //在字符串中 截取一部分 有头无尾!
f.startWith();  //4.判断字符串的开头和结尾!
f.endsWith();
f.getBytes();  //5.将字符串转化为字节 数组!、getBytes();
f.toCharArray();//6.将字符串 转字符 数组!
f.length();  //7 返回字符串的长度
f.contains();  //8.判断一个字符串中是否有另一个字符串?
f.replace();  //9..字符串替换 可以实现将指定的字符串 和字符 换成新的玩意!oldChar: 要替换的字符或字符串 newChar: 用于替换原来的字符串内容!
f.equals(); //10.判断两个字符串对象 是否相等!  
}
}
class ZiFuChuanFangFa{
private static final char oldChar = 0;
public void IndexOf()
{
String str="Ni Hao ";
int a=str.indexOf("p");
int a1=str.indexOf("i");
System.out.println("indexOf(‘p'):查找字符串数组中是否有 p 元素 没有就返回 "+a);
System.out.println("indexOf(‘o'):查找字符串数组中是否有 o 元素 有就返回此元素在该数组中的角标位置 "+a1);
}
public void equals() {  //10.在Java中 判断两个对象是否相等 不能“==”表示 会报错 需要 调用equal()方法!--->比较的字符串的内容是否相等
String str= new String("123");  // 演示 对错!
String str01= new String("123");
boolean a=str.equals(str01);
System.out.println(str ==str01);
System.out.println(a);
}
//2.获取指定索引位置的字符 在计算机 会直接将 字符转化成字节 a--->97
public void chartAt(){
System.out.println();
String str="zhaou xu feng";
int a=str.charAt(2);
System.out.println("chartAt(2):获取字符串中角标为2的元素! "+a);
}
//3.获取子字符串 开头到所有!
public void substring01(){
System.out.println();
String str="zhou xu feng";
String a=str.substring(8);  
System.out.println("sunstring(2): 获取字符串中角标为2的元素 ,并取2以后的所有元素 生成一个新的字符串(子字符串!包含的关系) "+a);
}
//3.1 获取字符串 区间性 有头无尾! int beginIndex,int endImdex
public void substring02(/*int beginIndex,int endImdex*/){
System.out.println();
String str="zhou xu feng";
String a=str.substring(1, 4);  //可以在 字符串中截取一部分
System.out.println("substring(1,4: 在字符串中截取一部分 有头无尾!) "+a);
}
//4.字符串替换 可以实现将指定的字符串 和字符 换成新的玩意!oldChar: 要替换的字符或字符串 newChar: 用于替换原来的字符串内容!
public void replace(){
System.out.println();
String str="zhou xu feng";  //oldChar: 要替换的字符或字符串
String a=str.replace("feng", "hui");  //newChar: 用于替换原来的字符串内容!
System.out.println("replace(qq,cc):字符串替换 后面的替换前面的 "+a);
}
//5.判断字符串的开始和结尾
public void startWith(){
System.out.println(); 
String str="zhaou xu feng";
boolean a=str.startsWith(str);
System.out.println("startsWith(str):判断字符串的开始 "+a);
}
public void endsWith( ){
System.out.println();
String str="zhaou xu feng";
boolean a=str.endsWith("g");
System.out.println("endsWith( ):判断字符串的结束 "+a);
}
/*6.字母大小写转换
* str.toLowerCase();
* str.toUpperCase();
* 
7.字符串分割
str.split(String sign);
*/
//8.将字符串转化为字节数组!、getBytes();
public void getBytes(){
System.out.println();
String str="zhaou xu feng";
byte[] arr=str.getBytes();
System.out.println("getBytes():将字符串转为字节数组!");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
//9.将字符串 转字符数组!
public void toCharArray()
{
System.out.println();
System.out.println();
String str="zhaou xu feng";
System.out.println("getCharArray():将字符串转为字符组!");
char []arr=str.toCharArray();
for (int i = 0; i < arr.length; i++) 
{
System.out.print(arr[i]);
}
}
//10 返回字符串的长度
public void length(){
System.out.println();
String str="zhaou xu feng";
int a= str.length();
System.out.println("length():返回字符串的长度!"+a);
}
//11.判断一个字符串中是否有另一个字符串?
public void contains(){
String str="zhaou xu feng";
boolean a=str.contains("xu");
System.out.println("contains(xu):判断一个字符串中是否有另一个字符串 "+a);
}
}

总结

到此这篇关于JAVA中String介绍及常见面试题小结的文章就介绍到这了,更多相关java string 面试题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JAVA实现对阿里云DNS的解析管理

    JAVA实现对阿里云DNS的解析管理

    本文主要介绍了JAVA实现对阿里云DNS的解析管理,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 解决mybatis用Map返回的字段全变大写的问题

    解决mybatis用Map返回的字段全变大写的问题

    这篇文章主要介绍了解决mybatis用Map返回的字段全变大写的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • java设计模式之中介者模式

    java设计模式之中介者模式

    这篇文章主要为大家详细介绍了java设计模式之中介者模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • javz笔记之:有趣的静态方法的使用

    javz笔记之:有趣的静态方法的使用

    本篇文章介绍了,java中静态方法的使用介绍,需要的朋友参考下
    2013-04-04
  • request如何获取body的json数据

    request如何获取body的json数据

    这篇文章主要介绍了request如何获取body的json数据操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • SpringBoot中注解实现定时任务的两种方式

    SpringBoot中注解实现定时任务的两种方式

    这篇文章主要介绍了SpringBoot中注解实现定时任务的两种方式,SpringBoot 定时任务是一种在SpringBoot应用中自动执行任务的机制,通过使用Spring框架提供的@Scheduled注解,我们可以轻松地创建定时任务,需要的朋友可以参考下
    2023-10-10
  • SpringBoot中注册Bean的方式总结

    SpringBoot中注册Bean的方式总结

    这篇文章主要介绍了SpringBoot中注册Bean的方式总结,@ComponentScan + @Componet相关注解,@Bean,@Import和spring.factories这四种方式,文中代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • Java FileDescriptor总结_动力节点Java学院整理

    Java FileDescriptor总结_动力节点Java学院整理

    FileDescriptor 是“文件描述符”。可以被用来表示开放文件、开放套接字等。接下来通过本文给大家分享Java FileDescriptor总结,感兴趣的朋友一起学习吧
    2017-05-05
  • java并发编程专题(一)----线程基础知识

    java并发编程专题(一)----线程基础知识

    这篇文章主要介绍了java并发编程线程的基础知识,文中讲解非常详细,帮助大家更好的学习JAVA并发编程,感兴趣想学习JAVA的可以了解下
    2020-06-06
  • Java Springboot 后端使用Mockito库进行单元测试流程分析

    Java Springboot 后端使用Mockito库进行单元测试流程分析

    使用Mock进行单元测试可以避免启动整个Spring框架,节省时间并降低外部依赖影响,Mock允许模拟外部方法和类,专注于测试方法的功能逻辑,本文给大家介绍Java Springboot 后端使用Mockito库进行单元测试流程分析,感兴趣的朋友跟随小编一起看看吧
    2024-10-10

最新评论