zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    IOS
    WAN
    在不同网段使用 VLAN 通信
    数据链路层
    GRE 协议
    路由协议 (1)
    隔离广播域的 VLAN 来了
    数据包的通信过程
    Webpack 原理浅析
    蒲公英 · JELLY技术周刊 Vol.16 谷歌首个线上 Web 开发者大会
  • 原文地址:https://www.cnblogs.com/ryyy/p/14228225.html
Copyright © 2011-2022 走看看