Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String类和Java';他对它的依赖_Java_String_Compiler Construction_Standard Library - Fatal编程技术网

String类和Java';他对它的依赖

String类和Java';他对它的依赖,java,string,compiler-construction,standard-library,Java,String,Compiler Construction,Standard Library,所以大家都知道,您可以编写的最短Java程序是: public class Program{ public static void main(String []args){ } } 人们可能会怀疑,这个最短的程序只包含语言关键字、选定的名称(如类名/函数名/参数名)和一些语法(括号等) 但是当你仔细观察时,突然出现了字符串类。那么这是否意味着Java语言离不开它的String类?甚至没有完整的标准库?(我认为C++没有标准库就可以存在,不?) 此外,我一直在查看字符串类代

所以大家都知道,您可以编写的最短Java程序是:

public class Program{
     public static void main(String []args){

     }
}
人们可能会怀疑,这个最短的程序只包含语言关键字、选定的名称(如类名/函数名/参数名)和一些语法(括号等)

但是当你仔细观察时,突然出现了字符串类。那么这是否意味着Java语言离不开它的String类?甚至没有完整的标准库?(我认为C++没有标准库就可以存在,不?) 此外,我一直在查看字符串类代码,但没有找到运算符+和+=(可能还有其他运算符?)的实现。那么这是怎么回事?这是作为特例嵌入到编译器中的吗?哪一个会将String类与java语言绑定得更紧密


Java语言中还有其他类嵌入得如此之深吗?

一个Java
字符串包含一个不可变的Unicode字符序列与C/C++不同,在C/C++中,字符串只是
char
数组,Java字符串是Java.lang类的对象

String在Java中是一个特殊的类,所有的字符串都是文本的。 “abc”(双引号内的任何内容)以单独的方式维护 字符串池,Java内存中的特殊内存位置,更多 就在里面

每当您使用字符串文字创建新的字符串对象时,JVM 首先检查字符串池,以及是否存在具有类似内容的对象 如果可用,则返回该值,并且不创建新对象JVM 如果使用“新建”创建对象,则不执行字符串池检查 操作员。

与普通类不同:

   String is associated with string literal in the form of double-quoted
   texts such as "Hello, world!". 

   You can assign a string literal directly into a String variable,
   instead of calling the constructor to create a String instance.

   The '+' operator is overloaded to concatenate two String operands.
   '+' does not work on any other objects such as your Person.java etc.

   String is immutable. That is, its content cannot be modified once it
   is created. For example, the method toUpperCase() constructs and
   returns a new String instead of modifying its existing content.
字符串在Java中受到特殊处理,因为它们在程序中经常使用。因此,效率(在计算和存储方面)至关重要

Java的设计者决定在面向对象语言中保留原语类型,而不是将所有东西都变成对象,从而提高语言的性能

原语存储在调用堆栈中,这需要更少的存储空间,并且操作成本更低。另一方面,对象存储在程序堆中,这需要复杂的内存管理和更多的存储空间

“+”运算符,它对基本体(如int)执行加法 和double),重载以对字符串对象进行操作。“+” 对两个字符串操作数执行串联。Java不支持 软件工程中操作符重载的考虑<强>不同于C++ 在这里,您可以使用“+”运算符执行减法运算。

“+”运算符是Java中唯一一个内部重载以支持字符串连接的运算符。请注意,“+”不适用于任何两个任意对象

实际上,JDK编译器使用String和StringBuffer通过“+”运算符处理字符串连接。比如,

字符串msg=“a”+“b”+“c”

将被编译成以下代码以提高效率:

   String is associated with string literal in the form of double-quoted
   texts such as "Hello, world!". 

   You can assign a string literal directly into a String variable,
   instead of calling the constructor to create a String instance.

   The '+' operator is overloaded to concatenate two String operands.
   '+' does not work on any other objects such as your Person.java etc.

   String is immutable. That is, its content cannot be modified once it
   is created. For example, the method toUpperCase() constructs and
   returns a new String instead of modifying its existing content.
字符串msg=new StringBuffer().append(“a”).append(“b”).append(“c”).toString()

出于性能原因,Java的字符串被设计为介于原语和类之间。

在第1.4节:

1.4. 与预定义类和接口的关系 如上所述,该规范通常引用JavaSE平台API的类。特别是,有些类与Java编程语言有着特殊的关系。示例包括类,例如
对象、
类、
类加载器、
字符串、
线程、
以及包
java.lang.reflect
中的类和接口等。该规范限制了此类类和接口的行为,但没有为它们提供完整的规范。读者可以参考JavaSE平台API文档

因此,所有这些类都必须存在,否则就不会被视为标准Java

对象
字符串
类分别通过节和更充分地充实

4.3.2. 类
对象
对象
是所有其他类的超类(§8.1.4)

所有类和数组类型继承(§8.4.8)类<代码>对象的方法,总结如下:

  • 方法
    clone
    用于复制对象

  • 方法
    equals
    定义了对象相等的概念,它基于值,而不是引用、比较

  • 方法
    finalize
    在对象销毁之前运行(§12.6)

  • 方法
    getClass
    返回表示对象类的
    Class
    对象

    每个引用类型都有一个
    Class
    对象。例如,可以使用它来发现类的完全限定名、其成员、其直接超类以及它实现的任何接口


    getClass
    的方法调用表达式的类型是
    ClassFirst您对字符串数组的声明是错误的。将其编辑为:publicstaticvoidmain(字符串[]args)。这就是用java定义程序入口点的方法。其次,运算符+存在于字符串和+=(这只是一个简短的形式,不是运算符本身)Java类有方法,它没有定义像+这样的运算符。不过,它也适用于参数之前的[],在发布之前对其进行了测试,但这不是故意的,而是一个输入错误:)。我知道操作符存在于“youcanuse”中,但不存在于String类的代码中。Java将无法在没有String的情况下运行,因为Object有一个