首页 > 编程语言 >java学习日记20230404-String类

java学习日记20230404-String类

时间:2023-04-03 23:03:21浏览次数:45  
标签:java String 20230404 System 字符串 println n1 out

String类

  • String对象用于保存字符串,也就是一组字符序列;
  • 字符串常量对象使用双引号包括起来的字符序列
  • 字符串的字符使用unicode字符编码,一个字符(不区分字母还是汉字)占用两个字节
  • String常用的构造器:
    • new String();
    • new String(String original);
    • new String(char[] a);
    • new String(char[] a,int startIndex,int count);
  • String实现了Serializable说明String可以串行化,可以网络传输
  • String实现了Comparable接口,说明String对象可以比较
  • String 是final类,不能被继承
  • 字符串本质是char数组,value[]是一个final类型,不可以修改(地址不能修改)
  • String01
    
    public class String01 {
        public static void main(String[] args) {
            String name ="Jack";
            final char[] value = {'a','b'};
            char[] v2 = {'5','4'};
            value[0]='h';
            for(char i:value){
                System.out.println(i);
            }
            
        }
    }
  • 创建String对象的方式
    • 直接赋值:String s="测试";
    • 调用构造器:String s1 = new String("测试");
    • 方式一:先从常量池查看是否有数据空间,如果有,直接指向,如果没有则重新创建,然后指向,最终指向的是常来那个池的空间地址;
    • 方式二:现在堆中创建空间,里面维护了value属性,指向常量池的空间,如果常量池没有,重新创建,如果有,直接通过value指向,最终指向的是堆中的空间地址
    • 当调用intern方法,如果池中包含一个等于String对象的字符串,用equals(object)方法确定,则返回池中的字符串,否则将String对象爱过你添加到池中,并返回此String对象的引用;intern()方法最终返回的是常量池的地址;
    • intern
       public class String01 {
          public static void main(String[] args) {
      
              final char[] value = {'a','b'};
              char[] v2 = {'5','4'};
              value[0]='h';
              for(char i:value){
                  System.out.println(i);
              }
              String name1 = new String("Jack");
              String name ="Jack";
              System.out.println(name == name1.intern());//true
          }
      }
  • String是一个final类,代表不可变的字符序列
  • 字符串是不可变的,,一个字符串对象一旦被分配,其内容是不可变的
  • 底层是StringBuilder sb = new StringBuilder();sb.append(a);sb.append(b);sb是在堆中,并且append是在原来字符串的基础上追加的
  • String c1 = "ab" +"cd";常量相加看的是池,变量相加,是在堆中
  • 方法String示例
     public class String02 {
    
        String  str = new String("hsp");
        final char[] ch = {'j','a','v','a'};
    
        public void change(String str,char ch[]){
            str = "java";
            ch[0] = 'h';
        }
        //调用方法会开一个新栈,方法里的形参是在这个新栈里面创建的变量,String是不可以变更的,所以在新栈中str指向
        //常量池中的java,方法执行完毕后,这个栈也被销毁了,原来的str维持不变
        public static void main(String[] args) {
            String02 string02 = new String02();
            string02.change(string02.str, string02.ch);
            System.out.println(string02.str);//hsp
            System.out.println(string02.ch);//hava
        }
    }
  • String类是保存字符常量的,每次更新都需要重新开辟空间,效率较低,因此java设计者提供了StringBuilder和StringBuffer来增强String的功能,并提高效率
  • String常见的方法
    • equals 区分大小写,判断内容是否相等
    • equalsIgnoreCase忽略大小写判断内容是否相等
    • length获取字符的个数
    • indexOf获取字符在字符串中第一次出现的索引,找不到返回-1
    • lastIndexOf获取字符在字符串中最后一次出现的索引,找不到返回-1
    • substring截取指定范围的字符串
    • trim去掉前后空格
    • charAt获取某索引出的字符
    • toUpperCase
    • toLowerCase
    • concat
    • replace替换字符串中的字符
    • split分割字符串,对于某些分割符,我们需要转义比如|\\
    • compareTo比较两个个字符串大小:返回正数,前者大,相等返回0,长度相等,根据字符从左向右比较差值,字符不等,直接比较字符串长度
    • toCharArray转化为字符数组
    • format格式化字符串%s字符串 %c字符 %d整型 %.2f浮点型 ,其中%s等为占位符
    • String常用方法示例
       public class StringMethod01 {
          public static void main(String[] args) {
              String n1 = "hello";
              String n2 = "Hello";
              System.out.println(n1.toUpperCase());
              System.out.println(n2.toLowerCase());
              System.out.println(n1.concat("测试").concat("2测试").concat("23"));
              System.out.println(n1.replace("hello","开发"));
              System.out.println(n1);
      
              String name = "张三";
              int n23 = 20;
              double sal = 2000.0;
              char gender = '男';
              String test = "我的名字叫%s,今年%d岁,月收入%.2f元,性别是%c";
              System.out.println(test.format(test,name,n23,sal,gender));
              System.out.println(n1.equals(n2));
              System.out.println(n1.equalsIgnoreCase(n2));
              System.out.println(n1.length());
              System.out.println(n1.indexOf("h"));
              System.out.println(n1.indexOf("H"));
              System.out.println("kk"+n1.indexOf("ll"));
              System.out.println(n1.lastIndexOf("l"));
              System.out.println(n1.substring(3));
          }
      }

标签:java,String,20230404,System,字符串,println,n1,out
From: https://www.cnblogs.com/DragonJack/p/17284260.html

相关文章

  • String 和 StringBuilder
    String类型在C#中用于保存字符,属于引用类型,一旦创建就不能再修改。1.在创建新字符串时,会在内存中重新分配空间。stringstr="helloworld";2.把一个字符串赋值给另外一个字符串,也会重新分配空间。stringstr1=str;3.修改字符串的值,也会重新分配......
  • 更改我们在Javaweb的运行启动方式
    之前之前,我都是利用上面的Tomcat的三角符号进行启动的更改1、下载插件在idea界面的右上角的设置按钮,选中其中的Plugins选项:然后会弹出一个界面,选中右上方的Marketplace,然后在下面的搜索框里面搜索MavenHelper:下载它,然后重启IDEA2、使用插件运行web右键项目名称,选中其中......
  • 剑指offer(Java)-数组中的逆序对(困难)
    题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例1:输入:[7,5,6,4]输出:5限制:0<=数组长度<=50000解题思路:这道题的核心在于归并排序,在归并排序的基础上进行求解逆序对。题解参......
  • 【Java 并发】【八】【Atomic】【一】JUC下的Atomic原子类体系概览
    1 前言这节我们就开始看看Atomic原子类系列,JUC包下提供的原子类底层的实现原理基本都是差不多的,都是基于volatile和CAS操作来保证线程安全的,我们后续会着重分析几个类。2  概览我们看下JUC下边都有哪些原子类:看上面的图形,我们使用红色圈中的那些,就是我们要着重讨论的,一共......
  • Java-Day-3(运算符 + 标识符 + 键盘输入)
    Java-Day-3运算符算术运算符关系运算符[比较运算符]逻辑运算符赋值运算符三元运算符位运算符[需要二进制基础]算术运算符+、-、*、/System.out.println(10.0/4);//2.5doubled=10/4;//2.0//数学公式有时不能硬搬,例如:摄氏温度=5/9*(华氏温......
  • 1006-HBase操作实战(JAVA API模式)
    一、准备阶段开发环境:hadoop: hadoop -2.4.0hbase: hbase -0.94.11-securityeclipse:JunoServiceRelease2二、创建 hbasedemo项目1、通过Eclipse创建一个新Java工程2、右击项目根目录,选择“Propertiesà>JavaBuildPathà>Libraryà> Add Ext......
  • 如何使用Java程序实现二叉数
    二叉树是一种重要的数据结构,它由一组节点组成,每个节点可以拥有最多两个子节点。使用Java可以很容易地实现一个二叉树。下面将介绍如何使用Java实现二叉树。二叉树的节点定义一个二叉树的节点可以定义为一个类,其中至少需要包含以下属性:节点值左子节点右子节点在Java中,我们......
  • Java多线程
    1.可见性、原子性和有序性问题多线程有三大特性,分别是可见性、原子性和有序性。1.1可见性  在单核时代,所有的线程都是在一颗CPU上执行,CPU缓存与内存的数据一致性容易解决。因为所有线程都是操作同一个CPU的缓存,一个线程对缓存的写,对另外一个线程来说一定是可见的。一个线程......
  • Java判断文件夹、文件是否存在,不存在则新建
    Java判断文件夹、文件是否存在,不存在则新建原文链接:https://blog.csdn.net/asfsdgdfgdf/article/details/1283162781、Java判断是否存在文件夹,不存在则新建Filefile=newFile("D:/test/filetest/test.txt");if(!file.getParentFile().exists()){file.getParentFile().......
  • Java 获取当前或调用者类名和方法名(Thread.currentThread().getStackTrace()、new Thr
    Java获取当前或调用者类名和方法名(Thread.currentThread().getStackTrace()、newThrowable().getStackTrace())原文链接:https://blog.csdn.net/inthat/article/details/111885544文章目录一、Java获取当前类名和方法名Thread.currentThread().getStackTrace()1.关于Thr......