• Java八大数据类型和String


    JAVA基本数据类型

    JAVA基本数据类型: byte,short,int,long为整型;float,double为浮点型;char为字符型;boolean 为布尔类型
    在这里插入图片描述

    基本类型间的转换

    存储范围小的类型到存储范围大的类型: 自动转换
    byte → short(char) → int → long → float → double

    从存储范围大的类型到存储范围小的类型(使用强转,可能会损失精度)
    double → float → long → int → short(char) → byte

    String

    八大基本本数据类型存在栈(stack),String的对象实例存在堆(heap),除此之外还要明白一个概念,常量池。

           	String s1 = "abc";              // String 直接创建
            String s2 = "abc";              // String 直接创建
            String s3 = s1;                    // 相同引用
            String s4 = new String("abc");   // String 对象创建
            String s5 = new String("abc");   // String 对象创建
    

    在这里插入图片描述

    以上代码的执行过程是这样的:

    String s1= “abc”, 首先看常量池中有没有“abc”这个字符串,显然没有,那么在常量池中创建一个“abc”字符串, s1 指向这个字符串。

    String s2 = “abc”, 在常量池中找到了字符串“abc”,那么 s2直接指向这个串。

    如果遇到new,那么就不在常量池中找了,直接在堆中创建实例。

    验证结果

     		System.out.println(s1 == s2);
            System.out.println(s1 == s3);
            System.out.println(s1 == s4);
            System.out.println(s4 == s5);
    

    在这里插入图片描述
    如果仅仅是想判断字符串值相等,那么就使用equals。

    String 特性

    String类 是final修饰的,不可以被继承。

    String类的底层是基于char数组的。

    String类被设计成不可变(immutable)类,所以它的所有对象都是不可变对象,线程安全,不会有并发问题。

    字符串连接

        public static void main(String[] args) {
            String str = "a"+"b"+"c";
            System.out.println(str);
        }
    

    这段代码会产生几个String对象呢,使用javap查看其字节码,可以看出只有一个
    在这里插入图片描述

    String str = "a";
            String str2 = "b";
            String str3 = "c";
            str = str+str2+str3;
            System.out.println(str);`
    

    这段代码查看源代码,可以看出生成了4个String对象,先是创建了str,str2,str3 ,然后用StringBuilder将他们append起来,返回新的一个String对象在这里插入图片描述

    StringBuffer 和StringBuilder

    由于String的不可变性,对其任意的修改都会产生一个新的对象,如果需要频繁变更,那就要使用StringBuffer和StringBuilder

    StringBuffer 线程安全,但效率慢
    StringBuilder 线程不安全,但效率快

    String,StringBuffer,StringBuilder

  • 相关阅读:
    还敢说你是程序员?一律师闲着没事写了个app,用户量600万
    cnentos中进行bond网卡配置,一切配置无问题,就是ping不通宿主机
    他曾被腾讯、百度、金山、遨游等联合封杀,如今他发展的却更好
    百度命不久矣?他为什么这么说?
    html实现下拉框、switch开关、复选框效果
    javascript拖拽滑动条
    行内元素默认间距的4种解决办法
    Html5 video用法详解
    npm装包时-S和-D的区别
    css3实现背景模糊的三种方式
  • 原文地址:https://www.cnblogs.com/ryyy/p/14228225.html
Copyright © 2020-2023  润新知