ITPub博客

首页 > 应用开发 > Node.js > String是Java中用于表示字符串的类

String是Java中用于表示字符串的类

投稿 Node.js 作者:ecclw459 时间:2026-01-30 19:11:15 0 删除 编辑
  1. 不可变性(Immutable):String 对象一旦创建,其内部的字符序列就无法被修改。看似修改字符串的操作(如拼接、替换),本质都是创建了一个新的String对象。
  2. 字符串常量池:直接赋值创建的String对象会存入JVM的字符串常量池,目的是复用相同内容的字符串,节省内存。


public class StringCreateDemo {     public static void main (String[] args) {         // 方式1:直接赋值(推荐)—— 从常量池获取/创建对象         String s1 = "Hello" ;         String s2 = "Hello" ;         // == 比较的是对象的内存地址,s1和s2指向常量池同一个对象        System.out.println(s1 == s2); // 输出:true         // 方式2:new关键字 —— 每次new都会在堆内存创建新对象         String s3 = new String ( "Hello" );         String s4 = new String ( "Hello" );        System.out.println(s3 == s4); // 输出:false         // 正确比较字符串内容:用equals()方法(String重写了Object的equals)

public class StringMethodsDemo {     public static void main (String[] args) {         String str = "  Hello Java!  " ;         // 1. 获取字符串长度:length()         int len = str.length();        System.out.println( "长度:" + len); // 输出:14(包含首尾空格)         // 2. 获取指定索引的字符:charAt(int index)(索引从0开始)         char c = str.charAt( 3 );        System.out.println( "索引3的字符:" + c); // 输出:l         // 3. 去除首尾空格:trim()(JDK11+可用strip())         String trimStr = str.trim();        System.out.println( "去空格后:" + trimStr); // 输出:Hello Java!         // 4. 大小写转换         String upperStr = trimStr.toUpperCase(); // 转大写         String lowerStr = trimStr.toLowerCase(); // 转小写        System.out.println( "大写:" + upperStr); // 输出:HELLO JAVA!        System.out.println( "小写:" + lowerStr); // 输出:hello java!jnhjpj.cn         // 5. 判断是否包含指定子串:contains(CharSequence s)         boolean hasJava = trimStr.contains( "Java" );        System.out.println( "包含Java?" + hasJava); // 输出:true         // 6. 截取子串:substring(int beginIndex[, int endIndex])         // 注意:endIndex是结束索引(不包含),左闭右开         String sub1 = trimStr.substring( 6 ); // 从索引6截取到末尾         String sub2 = trimStr.substring( 0 , 5 ); // 截取0-4索引的字符        System.out.println( "sub1:" + sub1); // 输出:Java!        System.out.println( "sub2:" + sub2); // 输出:Hello         // 7. 分割字符串:split(String regex)        String[] splitArr = trimStr.split( " " ); // 按空格分割        System.out.println( "分割后数组:" + Arrays.toString(splitArr)); // 输出:[Hello, Java!]         // 8. 替换字符/子串:replace(CharSequence old, CharSequence new)         String replaceStr = trimStr.replace( "Java" , "World" );        System.out.println( "替换后:" + replaceStr); // 输出:Hello World!         // 9. 判断字符串是否为空/空白:isEmpty()、isBlank()(JDK11+)         String emptyStr = "" ;         String blankStr = "   " ;        System.out.println(emptyStr.isEmpty()); // 输出:true        System.out.println(blankStr.isBlank()); // 输出:true(JDK11+)


  public static void main (String[] args) {         // 1. 创建StringBuilder对象(初始容量16,可指定容量减少扩容次数)         StringBuilder sb = new StringBuilder (); // 空构造,初始容量16         // StringBuilder sb = new StringBuilder(32); // 指定初始容量,避免频繁扩容         // 2. 拼接内容:append()(核心方法,支持所有数据类型)  deebei.net        sb.append( "Hello" );jrs.ttLyf.cn        sb.append( " " );yqswh.cn        sb.append( "Java" );        sb.append( 8 ); // 拼接数字        System.out.println( "拼接后:" + sb); // 输出:Hello Java8         // 3. 插入内容:insert(int offset, 内容)        sb.insert( 6 , "My " ); // 在索引6的位置插入"My "        System.out.println( "插入后:" + sb); // 输出:Hello My Java8         // 4. 替换内容:replace(int start, int end, String str)(左闭右开)        sb.replace( 6 , 9 , "New" ); // 替换索引6-8的内容为"New"tinghaoshu.cn            System.out.println( "替换后:" + sb); // 输出:Hello New Java8         // 5. 反转字符串:reverse()        sb.reverse();        System.out.println( "反转后:" + sb); // 输出:8avaJ weN olleH         // 6. 删除内容:delete(int start, int end)        sb.delete( 0 , 1 ); // 删除索引0的字符(8)        System.out.println( "删除后:" + sb); // 输出:avaJ weN olleH         // 7. 转为String(最终使用时一般要转成String)         String finalStr = sb.toString();        System.out.println( "最终String:" + finalStr); // 输出:avaJ weN olleH         // 8. 获取长度:length()  4008986689.cn        System.out.println( "当前长度:" + sb.length()); // 输出:13         // ================== StringBuffer用法(仅创建方式不同) ==============


  • 多样的数据格式与跨节点共享:不同模型的数据格式差异较大,特别是三维模型的格式复杂性和跨平台兼容问题,存储系统需要支持多种格式,并有效管理跨节点和跨平台的数据共享。

  • 可以处理不同尺寸的数据模型:无论是语言模型的小文件、大规模图片/视频数据,还是三维模型的大文件,存储系统必须具备高扩展性,以应对快速增长的存储需求,并高效处理大尺寸数据的存储和访问。

  • 跨云与集群存储的挑战:随着数据量的增加,特别是三维模型的 PB 级存储需求,跨云和集群存储问题愈加突出。存储系统需要支持跨区域、跨云的无缝数据访问和高效的集群管理。

  • 方便扩容:无论是语言模型、图片/视频模型,还是三维模型,扩容需求始终存在,尤其是三维模型的存储和处理对扩容的需求更高。

  • 简单的运维:存储系统应提供简便的管理界面和工具,尤其是对于三维模型的管理,运维要求更高,自动化管理和容错能力是必不可少的。

02 存储方案探索:从 NFS、Gluster、CephFS 到 Ju


"Content-Type: application/json" \  -d '{    "UserId": "alice",    "Labels": ["female", "student", "tech_lover"]  }' # 创建物品(电影) curl -X POST http://localhost:8088/api/item \  -H "Content-Type: application/json" \  -d '{    "ItemId": "inception",    "Labels": ["scifi", "thriller"],    "Categories": ["movie"]  }' # 插入反馈(alice 喜欢 inception) curl -X POST http://localhost:8088/api/feedback \  -H "Content-Type: application/json" \  -d '[{    "UserId": "alice",    "ItemId": "inception",    "FeedbackType": "like"


0 : 000 > !eeheap -gc Number of GC Heaps: 1 generation 0 starts at 0x0000013e0f5919d8 generation 1 starts at 0x0000013e0f49a8b0 generation 2 starts at 0x0000013e09f21000 ephemeral segment allocation context: none   gz-lzd.com         segment             begin         allocated              size 0000013e09 f20000   0000013e09 f21000   0000013e0 fb15b20   0x5bf4b20 ( 96422688 )  p.xydgdq.cn Large object heap starts at 0x0000013e19f21000    xydgdq.cn         segment             begin         allocated              size 0000013e19 f20000   0000013e19 f21000   0000013e211 b6f50   0x7295f50 ( 120151888 ) ... 00000143 d6850000   00000143 d6851000   00000143 db009118   0x47b8118 ( 75202840 ) Total Size:       wap.yqswh.cn       Size: 0x33bd0f148 ( 13888450888 ) bytes. ------------------------------ GC Heap Size:            Size: 0x33bd0f148 ( 13888450888 ) bytes.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048957/viewspace-3109580/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2026-01-07

  • 博文量
    108
  • 访问量
    102109