zoukankan      html  css  js  c++  java
  • java中字符串比较的问题

    我也是个小白,理解的可能有误,各位倘若看到一定要带思考的去看。

    时隔一年,我刚毕业进入工作了,虽然还是个菜鸡...
    我来给大家总结下(完了某天我回来再看这些反而越来越乱了).
    你们一定要保持中立角度去看文章啊!!!!

    String str = "aaa";
    String str2 = "aaa";
    String str3 = new String("aaa");

    有啥区别呢?区别就是str3用到了new关键字,new就要新建对象,不new就不新建而是赋值(引用).
    String的new咋new的呢,就是在堆空间new一个对象,然后指向new的这个对象,这个new的对象再去指向那个"aaa"字符串.

    不去new,不会有中间这个东西做中转,直接赋值,他们指向的地址还是一样的.

     

    一、关于基本类型与引用类型

    1.基本类型:  

    全在栈空间:名字--具体值

    整型:byte short  int long

    浮点型:float double

    逻辑型:boolean

    字符型:char

    2.引用类型:

    两部分构成

    • 栈空间:名字--地址

    地址用于在堆空间的寻找

    • 堆空间:具体值

    类、接口、数组

    二、创建字符串的两种方式

    1.字面量赋值方式

    String a = "ttt";

    该种直接赋值的方法,JVM会去字符串常量池(String对象不可变)中寻找是否有equals("ttt")的String对象,如果有,就把该对象在字符串常量池中"ttt"的引用复制给字符串变量a,如若没有,就在堆中新建一个对象,同时把引用驻留在字符串常量池中,再把引用赋给字符串变量str。

    2.new关键字创建新对象

    String b = new String("ttt");

    利用new来创建字符串时,无论字符串常量池中是否有与当前值相同的对象引用,都会在堆中新开辟一块内存,创建一个新的对象。

    注:字符串无法被修改(String对象不可变): eg:

    String str1 = new String("ttttttt"); 
    str1 = "yyyyyyy";

    对str1重新赋值后 ttttttt这个String对象在堆空间中并没有消失

    即在堆空间中新建一个字符串yyyyyy 不再指向ttttttt 而是重新指向yyyyyyyy的首地址

    img

     

     

    三、关于字符串的比较

    String str1 = "ttt";
    String str2 = "ttt";
    String str3 = new String("ttt");

    三个字符串变量的创建过程如下

    img

     

    • equals

    值比较

    所以字符串在比较相等时通常用这个,看下方实例的例二.new出来两个str的在堆空间地址是不一样的.

    • ==

    地址(引用)比较

     

    四、实例

    例一:

    String a = "ttt";
    String b = "ttt";

    equals相等  ==相等

    例二:

    String a = new String("ttt");

    String b = new String("ttt");

    equals相等  ==不相等  

    例三:

    String a = "ttt";
    String b = new String("ttt");

    equals相等  ==不相等

     

  • 相关阅读:
    leetcode 131. Palindrome Partitioning
    leetcode 526. Beautiful Arrangement
    poj 1852 Ants
    leetcode 1219. Path with Maximum Gold
    leetcode 66. Plus One
    leetcode 43. Multiply Strings
    pytorch中torch.narrow()函数
    pytorch中的torch.repeat()函数与numpy.tile()
    leetcode 1051. Height Checker
    leetcode 561. Array Partition I
  • 原文地址:https://www.cnblogs.com/yang37/p/11204347.html
Copyright © 2011-2022 走看看