String使用字面值常量赋值与new String()赋值的区别

我们都知道比较字符串的内容需要使用String.equals(String) 方法 直接使用 == 来比较2个字符串,比较的是这两个字符串的内存地址。

最近看到一个java的小细节如下:

public static void main(String[] args) {
        String a="aaa";
        String b=new String("aaa");
        String c="aaa";
        System.out.println(a==b); //输出是false,因为new String就是生成了一个新String对象
        System.out.println(a==c); //输出是true,因为当内存中有一个"aaa"的字符串常量的时候,创建String c的时候就不会新建String对象,而是指向a指向的地址
    }

暂时还没有想到这个小细节的用处

时间: 2024-10-25 06:18:27

String使用字面值常量赋值与new String()赋值的区别的相关文章

Java堆、栈和常量池以及相关String的详细讲解(转)

一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配.你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象. ------最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 堆栈(stack).位于通用RAM中,但通过它的"堆栈指针"可以从处理器哪里获得支持.堆栈指针若向下移动,则分配新的内存:若向上移动

Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)

博客分类: Java综合 一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配.你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象. ------最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 堆栈(stack).位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持.堆栈指针若向下移动,则分配新的

Java堆、栈和常量池以及相关String的详细讲解

一:在JAVA中,有六个不同的地方可以存储数据:   1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配.你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象. ------最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈(stack).位于通用RAM中,但通过它的"堆栈指针"可以从处理器哪里获得支持.堆栈指针若向下移动,则分配新的内存:若向上移

Java堆、栈和常量池以及相关String的讲解

一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配.你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象. ------最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 堆栈(stack).位于通用RAM中,但通过它的"堆栈指针"可以从处理器哪里获得支持.堆栈指针若向下移动,则分配新的内存:若向上移动

java基础知识回顾之---java String final类 容易混淆的java String常量池内存分析

/** *   栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放  在常量池中). 堆(heap):存放所有new出来的对象. *   静态存储:存放静态成员(static定义的). 常量池(constant pool):在堆中分配出来的一块存储区域,存放储显式的String常量和基本类型常量(float.int等).另外,可以存储不经常改变的东西 *                       p

Item 30 用enum代替int常量类型枚举,string常量类型枚举

1.用枚举类型替代int枚举类型和string枚举类型 public class Show { // Int枚举类型 // public static final int APPLE_FUJI = 0; // public static final int APPLE_PIPPIN = 1; // public static final int APPLE_GRANNY_SMITH = 2; public enum Apple { FUJI, PIPPIN, GRANNY_SMITH } pub

String字符串针对常量池的优化

String对象是java语言中重要的数据类型,但是不是基本数据类型.相对于c语言的char java做了一些封装和延伸. 针对常量池的优化:当两个String拥有相同的值时,它们只引用常量池中的同一个拷贝.当一个字符串反复出现时,这个技术可以大幅度节省内存空间. String str1 = "abc"; String str2 = "abc"; String str3 = new String("abc"); str1 == str2 ; //

String 类和常量池

1.String 对象的两种创建方式: // 在常量池中拿对象String str1 = "abcd"; // 直接在堆内存空间创建一个新的对象 String str2 = new String("abcd"); sout(str1 == str2); // false 注: 只要使用 new方法,便需要创建新的对象 2. String类型的常量池比较特殊.它的主要使用方法有两种 * 直接使用双引号声明出来的 String 对象会直接存储在常量池中. * 如果不是用

网络编程中的常见陷阱之 0x十六进制数(C++字面值常量)

十六进制数相等的推断 请问例如以下程序的输出是神马? #include <iostream> #include <string> using namespace std; int main (int, char *[]) { char s[1]={0}; s[0] = 0xfe; if (s[0] == 0xfe) { cout<<"=="<<endl; } else { cout<<"!="<<