zoukankan      html  css  js  c++  java
  • javasestring类介绍01

    一、String类简介
    java.lang.String类用于描述一个字符序列。String类是不可变对象的类。其对象一旦被创建,永远无法改变。但是对象的引用可以重新赋值。而且String类被final关键字修饰,其本身不能被继承。String类内部封装了字符数组以及针对字符数组操作的相关算法。
    二、关于String类是不可变对象的几点解释
    1、经常使用String类作为方法的参数,为了保证方法的调用正确,要求字符串内容不可以改变
    2、出于内存的考虑,重用在开发中远比修改多得多。所以Java在重用字符串的时候没有新建新对象,而是都引用同一个。这就要求字符串内容不可变。出于性能的考虑,JVM会将静态字符串(字面量/常量/常量连接的结果)在常量池中创建。并尽量使用同一对象重用静态字符串。对于重复出现的静态字符串,JVM会首先在常量池中查找,如果存在即返回该对象。不存在则创建。
    public static void main(String[] args){
            /**
             * 当我们使用字符串字面值创建字符串对象时,
             * 虚拟机会首先在常量池中查找,如果存在即返回该对象
             */
            String str1 = "hello";//字符串 类创建对象的时候不需要new
            String str2 = "hello";
            String str3 = "hello";
            String str4 = new String("hello");
            System.out.println(str1 == str2);//使用==比较字符串的时候比较的是地址,而不是内容。
             System.out.println(str1 == str3);
            System.out.println(str1 == str4);//false
            System.out.println(str1.equals(str4));//true //使用equals方法比较的是字符串中的内容
    }

    str2,str3不会创建新的对象,而是使用常量池中已有的Hello。str4使用new关键字会创建一个新的对象。

    三、编译器对字面值量的优化

    编译器在编译源文件的时候若发现表达式的两边都是常量的话,会先进行计算,在将结果生成到字节码文件中去。所以jvm运行.class文件的时候。下面的内容应该是这样的。 

    String str5 = "123"+"abc";
    //编译器先进行运算
    String str5 = "123abc";
    
    String s = "123";
    //编译器不运算,因为s是变量
    String str6 = s + "abc";

    四、String类在内存中采用Unicode编码,每个字符在内存中都占用两个字节(不管中英文)。而且每个字符的长度都是1(不管中英文)。

    public static void main(String[] args) {
            String str = "好好努力,学好java";
            System.out.println(str.length());//11
        }
  • 相关阅读:
    字符菱形
    字符三角形
    10:超级玛丽游戏
    09:字符菱形
    08:字符三角形
    07:输出浮点数
    06:空格分隔输出
    05:输出保留12位小数的浮点数
    04:输出保留3位小数的浮点数
    02:输出第二个整数
  • 原文地址:https://www.cnblogs.com/gemine/p/4840523.html
Copyright © 2011-2022 走看看