首页 > 其他分享 >String类

String类

时间:2023-08-15 17:35:43浏览次数:17  
标签:String System 字符串 println public out

String类

String用来表示一个字符串。具有以下特点:

•java.lang.String使用了final修饰,不能 被继承;

•字符串底层封装了字符数组及针对字符数组的操作算法;

•字符串一旦创建,对象永远无法改变,但字符串引用可以重新赋值;

•Java字符串在内存中采用Unicode编码方式,任何一个字符对应两个字节的定长编码。

 

字符串常量池

java在堆内存中开辟了一段空间用于缓存所有使用字面量形式创建的字符串对象,并在后期再次使用该字面量创建字符串时重用对象,避免内存中堆积大量内容一样的字符串对象来减小内存开销。

对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在即返回该对象地址。

package string;
/**
* 字符串String
* 内部使用一个char数组保存所有字符,每个字符为2字节,存的是该字符unicode编码。
* 字符串是不变对象,一旦创建内容不可改变,若改变会创建新对象
*/
public class StringDemo {
   public static void main(String[] args) {
       /*
           字符串常量池
           java在堆内存中开辟了一段空间用于缓存所有使用字面量形式创建的字符串对象,
           并在后期再次使用该字面量创建字符串时重用对象,避免内存中堆积大量内容一样
           的字符串对象来减小内存开销。
        */
       String s1 = "123abc";//字面量
       String s2 = "123abc";//与s1字面量相同,重用对象
       //地址相同,说明s2重用了s1对象
       System.out.println(s1==s2);//true
       String s3 = "123abc";
       System.out.println(s1==s3);//true

       String s4 = new String("123abc");//new会产生新对象
       System.out.println("s4:"+s4);
       System.out.println(s1==s4);//false
       /*
           通常我们判断字符串都是比较内容,因此应当使用字符串的equals方法
        */
       System.out.println(s1.equals(s4));//true
       /*
           由于字符串是不变对象,改变内容会产生新对象
        */
       s1 = s1 + "!";//生成一个新的字符串对象123abc!.
       System.out.println("s1:"+s1);//123abc!
       System.out.println("s2:"+s2);//123abc
       System.out.println(s1==s2);//false s1,s2已经不再指向同一个对象了

       /*
           这里触发了一个编译器的特性:
           编译器在编译期间若遇到几个计算表达式,发现在编译期可以确定结果时就会进行计算
           并将结果编译到class文件中,这样以来JVM每次执行字节码文件就无需再计算了。
           下面的代码会被编译器改为:
           String s5 = "123abc";
           也因此s5会重用常量池中的对象,所以地址与s2相同
        */
       String s5 = "123" + "abc";
       System.out.println("s5:"+s5);
       System.out.println(s2==s5);

       String s = "123";
       String s6 = s + "abc";
       System.out.println("s6:"+s6);
       System.out.println(s2==s6);

       String s7 = 1+2+3+"abc";//6abc
       System.out.println(s2==s7);//false


       String s8 = 1+'2'+3+"abc";
       System.out.println(s2==s8);//false

       String s9 = 1+"2"+3+"abc";
       System.out.println(s2==s9);//true

  }
}

字符串常用方法

int length()

返回当前字符串的长度(字符个数)

package string;

public class LengthDemo {
   public static void main(String[] args) {
       String str = "我爱java!";
       int len = str.length();
       System.out.println("len:"+len);
  }
}
indexOf()

检索给定字符串在当前字符串中的位置,若当前字符串不含有给定内容则返回值为-1

package string;

public class IndexOfDemo {
   public static void main(String[] args) {
       //           0123456789012345
       String str = "thinking in java";

       int index = str.indexOf("in");//2
       System.out.println(index);

       //重载的方法可以从指定位置开始检索第一次出现给定字符串的位置
       index = str.indexOf("in",3);//5
       System.out.println(index);

       //检索最后一次出现in的位置
       index = str.lastIndexOf("in");
       System.out.println(index);


  }
}
substring()

截取当前字符串中指定范围内的字符串。两个参数分别为开始位置的下标和结束位置的下标。

package string;

/**
* String substring(int start,int end)
* 截取当前字符串中指定范围内的字符串。两个参数分别为开始位置的下标和结束位置的下标。
* 注:在JAVA API中通常使用两个数字表示范围时是"含头不含尾"的。
*/
public class SubstringDemo {
   public static void main(String[] args) {
       //             01234567890
       String line = "www.tedu.cn";
       //截取域名tedu
       String str = line.substring(4,8);
       System.out.println(str);
       
       //重载的方法是从指定位置开始截取到字符串末尾
       str = line.substring(4);
       System.out.println(str);

  }
}
trim()

去除一个字符串两边的空白字符

package string;

/**
* String trim()
* 去除一个字符串两边的空白字符
*/
public class TrimDemo {
   public static void main(String[] args) {
       String line = "   hello         ";
       System.out.println(line);
       
       String trim = line.trim();
       System.out.println(trim);
  }
}

 

charAt()

返回当前字符串中指定位置上的字符

package string;

/**
* char charAt(int index)
* 返回当前字符串中指定位置上的字符
*/
public class CharAtDemo {
   public static void main(String[] args) {
       //           0123456789012345
       String str = "thinking in java";
       //获取第10个字符
       char c = str.charAt(9);
       System.out.println(c);

  }
}
startsWith()和endsWith()

判断当前字符串是否是以给定的字符串开始或结束的。

package string;

/**
* boolean startsWith(String str)
* boolean endsWith(String str)
* 判断当前字符串是否是以给定的字符串开始或结束的。
*/
public class StartsWithDemo {
   public static void main(String[] args) {
       String line = "http://www.tedu.com";

       boolean starts = line.startsWith("http");
       System.out.println("starts:"+starts);

       boolean ends = line.endsWith(".com");
       System.out.println("ends:"+ends);
  }
}
toLowerCase()和toUpperCase()
package string;

/**
* String toUpperCase()
* String toLowerCase()
* 将当前字符串中的英文部分转换为全大写或全小写
*/
public class ToUpperCaseDemo {
public static void main(String[] args) {
String line = "我爱Java";

String lower = line.toLowerCase();
System.out.println(lower);

String upper = line.toUpperCase();
System.out.println(upper);

}
}
valueOf()

String提供了一组重载的静态方法:valueOf,作用是将其他类型转换为String

package string;

/**
* String提供了一组重载的静态方法:valueOf
* 作用是将其他类型转换为String
*/
public class ValueOfDemo {
   public static void main(String[] args) {
       int a = 123;
       String s1 = String.valueOf(a);
       System.out.println("s1:"+s1);

       double d = 123.123;
       String s2 = String.valueOf(d);
       System.out.println("s2:"+s2);

       String s3 = a+"";//任何内容和字符串链接结果都是字符串
       System.out.println("s3:"+s3);

  }
}

标签:String,System,字符串,println,public,out
From: https://www.cnblogs.com/worldTree/p/17631911.html

相关文章

  • StringBuilder类
    StringBuilder类由于String是不变对象,每次修改内容都要创建新对象,因此String不适合做频繁修改操作.为了解决这个问题,java提供了StringBuilder类.packagestring;​/***频繁修改字符串带来的性能损耗.*/publicclassStringDemo2{  publicstaticvoidmain(String[]......
  • String应该这么玩
    当需要替换一个字符串中的某个字符,你会怎么做?方法一:使用replace()Stringstr="Hello,world!";StringnewStr=str.replace(",","");//去掉逗号System.out.println(newStr);//输出Helloworld!方法二:使用repalceAll()正则的方式Stringstr="Helloworld!&......
  • 【C++STL基础入门】string类的基础使用
    @TOC前言本系列文章使用VS2022,C++20版本STL(StandardTemplateLibrary)是C++的一个强大工具集,其中的string类是STL中一个常用的容器。本文将介绍string类的基本使用方法。一、STL使用概述在STL中,我们的每一个容器/string字符串等都是使用面向对象技术来实现的,我们只需要调用里面的函......
  • cl_wdr_conversion_utils=>from_string
    在sap中,每种货币单位都可以维护对应的小数位数(如果未维护,则使用默认两位小数),该信息保存在表tcurx中。在使用TCode:OY04更改该数据时,会有如下提示:在您继续之前,请仔细阅读以下内容。如果不留意此注释,您可能会用事务对系统造成不可挽回的损坏。在R/3系统表中,货币字段作为小数存储,其......
  • 如何向这个public static void main(String[] args)中的args数组传递参数呢
    如何向这个publicstaticvoidmain(String[]args)中的args数组传递参数呢要向publicstaticvoidmain(String[]args)中的args数组传递参数,可以在命令行中运行Java程序时附加参数。以下是两种常见的方法:在命令行中手动输入参数:我们首先要进入这个类所在的文件夹在......
  • String、StringBuilder、StringBuffer
    String、StringBuilder和StringBuffer是Java中用于处理字符串的类,它们之间有以下区别:不可变性:String类是不可变的,即创建后不能被修改。每次对String进行操作时,都会创建一个新的String对象。而StringBuilder和StringBuffer是可变的,可以进行修改和拼接操作。线程安全性:String......
  • c++ std::to_string实现原理
    写这篇的起因是看到MSVCSTL的一个issue,里面提到to_string<int>的实现,正常人的思维是直接除10拿到每位,其实有个更高效的查表法字符串转数字除100拿到两位,并查表填入,少了一半的除法,代价是需要一个201个byte的空间,下面是gcc的实现//Writeanunsignedintegervaluetother......
  • How to use Javascript JSON.stringify similar method in Python All In One
    HowtouseJavascriptJSON.stringifysimilarmethodinPythonAllInOne如何在Python中使用类似JavaScriptJSON.stringify的方法应用场景比较两个数组(列表)对象是否相等/comparestwoarray(list)objectsforequality//jsarr1=[1,2,3]arr2=[1,2,3]......
  • HDU7326 string magic(Easy Version)
    HDU7326stringmagic(EasyVersion)tag:回文自动机题目链接题意:多组样例,每组输入一字符串(长度1e5以内),输出满足下列条件的子串个数:该串由两个完全相同的回文串拼接而成做法:字符串的题目一般都比较板,洛谷的P4287可以说是这道题目的原题,我们先看看原题是怎么做的P4287双......
  • java.lang.NoSuchMethodError: com.baomidou.mybatisplus.core.toolkit.StringUtils.i
    1、原因这是由于两个版本不一致导致的;<!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version&......