字符串类和Java对它的依赖 - java

因此每个人都知道,您可以编写的最短的Java程序是:

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

     }
}

人们可能会怀疑,这个最短的程序只能由语言关键字,所选名称(如类名/函数名/参数名)和某些语法(括号等)组成。

但是当您仔细观察时,会弹出String类。那么这是否意味着Java语言如果没有String类就无法生存?甚至没有完整的标准库? (我认为C ++可以不使用其标准库就可以存在,不是吗?)

另外,我一直在查看String类代码,但是没有地方可以找到+和+ =运算符的实现(也许还有其他实现?)。那如何运作?这是否作为特殊情况嵌入到编译器中?哪一个甚至可以将String类绑定到Java语言呢?

是否还有其他类深深地嵌入了Java语言中?

java大神给出的解决方案

Java String包含不可变的Unicode字符序列。与C / C ++(其中string只是arraychar)不同,Java String是java.lang类的对象。

String是Java和所有String文字中的特殊类,例如
“ abc”(双引号内的所有内容)都单独保存
字符串池,Java内存中的特殊内存位置,更多
恰好在PermGen Space内部。

每次使用String文字创建新的String对象时,JVM
首先检查字符串池以及对象是否具有相似的内容
可用,它会返回该值,并且不会创建新对象。虚拟机
如果使用new创建对象,则不执行字符串池检查
操作员。

与普通班级不同:

   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),可以重载以对String对象进行操作。 '+'
对两个String操作数执行串联。 Java不支持
与C ++不同,出于软件工程考虑,运算符重载
您可以在其中转动“ +”运算符进行减法。

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

实际上,JDK编译器同时使用String和StringBuffer来通过'+'运算符处理字符串连接。举些例子,

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

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

字符串味精=新
StringBuffer()。append(“ a”)。append(“ b”)。append(“ c”)。toString();

出于性能方面的考虑,Java的String设计为介于基本体和类之间。

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

从方法返回数组-Java - java

private static Coordinate[] getCircleCoordintaes() { Coordinate coordinates[] = {new Coordinate(0, 0)}; return coordinates; } 以上程序工作正常。在上面的程序中,返回的坐标数组首先初始化了数组使用这条线Coordinate coordi…

Java Swing SearchBox模型 - java

我需要使用Java Swing的搜索框,如果单击任何建议,当输入字母时它将显示来自数据库的建议,它将执行一些操作。如果有可能在Java swing中,请提供源代码提前致谢 java大神给出的解决方案 您可以使用DefaultComboBoxModel,输出将是这样。Try this在此代码中,您将找到countries数组,因此您需要从数据库中获取此数组。

JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…