Java StringIn Java, string is basically an object that represents sequence of char values. An array of characters works same as Java string. For example: is same as: Java String class provides a lot of methods to perform operations on strings such as compare(), concat(), equals(), split(), length(), replace(), compareTo(), intern(), substring() etc. The java.lang.String class implements Serializable, Comparable and CharSequence interfaces. CharSequence InterfaceThe CharSequence interface is used to represent the sequence of characters. String, StringBuffer and StringBuilder classes implement it. It means, we can create strings in Java by using these three classes. The Java String is immutable which means it cannot be changed. Whenever we change any string, a new instance is created. For mutable strings, you can use StringBuffer and StringBuilder classes. We will discuss immutable string later. Let's first understand what String in Java is and how to create the String object. What is String in Java?Generally, String is a sequence of characters. But in Java, string is an object that represents a sequence of characters. The java.lang.String class is used to create a string object. How to create a string object?There are two ways to create String object:
1) String LiteralJava String literal is created by using double quotes. For Example: Each time you create a string literal, the JVM checks the "string constant pool" first. If the string already exists in the pool, a reference to the pooled instance is returned. If the string doesn't exist in the pool, a new string instance is created and placed in the pool. For example: In the above example, only one object will be created. Firstly, JVM will not find any string object with the value "Welcome" in string constant pool that is why it will create a new object. After that it will find the string with the value "Welcome" in the pool, it will not create a new object but will return the reference to the same instance. Note: String objects are stored in a special memory area known as the "string constant pool".Why Java uses the concept of String literal?To make Java more memory efficient (because no new objects are created if it exists already in the string constant pool). 2) By new keywordIn such case, JVM will create a new string object in normal (non-pool) heap memory, and the literal "Welcome" will be placed in the string constant pool. The variable s will refer to the object in a heap (non-pool). Interfaces and Classes in Strings in JavaIn Java, both String and CharBuffer interact with sequences of characters, but they are designed with different use cases and underlying mechanisms in mind. Here's an exploration of their interfaces, classes, and how they fit into the Java ecosystem. StringThe String class is one of the most fundamental types in Java, designed to represent immutable sequences of characters. Here's a closer look at its characteristics and the interfaces it implements:
CharBufferCharBuffer, on the other hand, is part of the java.nio package, which provides a set of classes for non-blocking I/O operations. CharBuffer is a mutable sequence of characters with more flexibility for manipulation. Here's more about CharBuffer:
CharSequence InterfaceJava's CharSequence interface provides a unified, read-only view of character sequences and is a component of the java.lang package. It facilitates consistent access and manipulation across various types of character sequences, including String, StringBuilder, StringBuffer, and CharBuffer. Through this interface, key functionalities for handling character data are defined, enabling actions like measuring sequence length, accessing particular characters, generating character subsequences, and transforming into a String format. By providing a common blueprint for character sequences, `CharSequence` enables flexible and implementation-independent text processing across the Java platform.
StringIn Java, the String class encapsulates a series of characters. Once instantiated, a String object's content is fixed and cannot be modified, attributing to its immutable nature. This immutability ensures that String objects are safe for concurrent use across threads and are optimally performant in situations where the textual content remains constant. To enhance memory efficiency, Java employs a technique called string interning. This approach optimizes the storage and access of commonly utilized string literals. Syntax: Direct assignment using string literals: Using the String constructor: Filename: StringExample.java Output: Hello, World! Length: 13 StringBufferStringBuffer represents a mutable sequence of characters that ensures thread safety, making it suitable for scenarios involving multiple threads that modify a character sequence. It includes various string manipulation capabilities, including the ability to insert, delete, and append characters. This design avoids the necessity of generating new objects with each change, leading to enhanced efficiency in situations requiring regular adjustments to the string content. Syntax Filename: StringBufferExample.java Output: Hello, World! StringBuilderStringBuilder shares similarities with StringBuffer by being a mutable character sequence. The crucial distinction lies in StringBuilder not being synchronized, rendering it not suitable for thread-safe operations. This absence of synchronization, though, contributes to StringBuilder offering superior performance in environments that are single-threaded or confined to a specific thread. As a result, StringBuilder becomes the favored option for manipulating strings in contexts where the safety of concurrent thread access is not an issue. Syntax Filename: StringBuilderExample.java Output: Hello, World! StringTokenizerJava's StringTokenizer class, housed within the java.util package, simplifies the process of segmenting a string into multiple tokens, utilizing designated separators. This class is exceptionally beneficial for parsing strings and navigating through their tokens, especially in scenarios involving user inputs, file contents, or network transmissions formatted with straightforward separators such as commas, spaces, or tabs. It offers an efficient means to dissect and examine the tokenized segments of a string, catering to situations that demand basic parsing capabilities. The StringTokenizer class implements the Enumeration<Object> interface, allowing the tokens of the string to be iterated like other enumeration types in Java. It offers a straightforward approach to tokenization, avoiding the need for more complex regular expressions, making it suitable for simple parsing needs. Syntax: Filename: StringTokenizer.java Output: Apple, Banana, Cherry Immutable String in JavaIn Java, strings are immutable. It means that its value cannot be changed once a String object is created. If any operation appears to modify a String, what happens is the creation of a new String object. The original string remains unchanged. This immutable characteristic of strings in Java has several implications for performance, security, and functionality. Filename: ImmutableStringExample.java Output: Original string: Java After modification, original string: Java Modified string: Java Programming After calling toUpperCase on original string: Java Original string in uppercase: JAVA Memory Allotment of StringMemory allotment for strings in Java is interesting due to Java's handling of string immutability and the string pool mechanism. Understanding how strings are stored can help optimize memory usage in Java applications, especially those that heavily use string manipulations. String Literal Storage: When you create a string using string literals, Java checks the string pool first. The new variable points to the existing string if it already exists. If it doesn't exist, the new string is added to the Pool, and the variable points to this new string. Syntax: new Keyword and String Pool: Strings created with the new operator do not use the Pool by default. They are stored in the heap memory outside the Pool, which means each new operation results in a new object, even if it contains the same string data. Syntax: Interning: We can manually add a string to the Pool or ensure it uses the Pool by calling the intern() method on a string object. If the Pool already contains an equal string, the string from the Pool is returned. Otherwise, the string is added to the Pool. Syntax: Filename: StringMemoryAllotment.java Output: str1 == str2: true str3 == str4: false str1 == str5: true str1 == str6: true Why did the String pool move from PermGen to the normal heap area?Java 8 introduced a notable shift in memory management within the Java Virtual Machine (JVM) by moving the String Pool from the Permanent Generation (PermGen) to the general heap space. This adjustment was a key element of a wider effort to improve memory utilization, ease the management and configuration of memory, and boost the efficiency and scalability of Java-based applications. To fully comprehend the significance of this change, it's important to understand both the constraints associated with PermGen and the advantages that stem from transferring the String Pool and additional metadata to the heap area. Syntax: Filename: StringInternExample.java Output: Interned String and Literal String refer to the same object: true Construct String from a subset of the char arrayIn Java, creating a String based on a portion of a char array is achievable through a specific constructor in the String class. This constructor requires three parameters: the char array to be used, an index indicating the starting point of the desired subset, and the count of characters to encompass in the subset. Here's the syntax and an example: Syntax:
Filename: CharArrayToString.java Output: World Java String ExampleStringExample.java Test it NowOutput: java strings example The above code, converts a char array into a String object. And displays the String objects s1, s2, and s3 on console using println() method. Java String class methodsThe java.lang.String class provides many useful methods to perform operations on sequence of char values.
Next TopicImmutable String |
We provides tutorials and interview questions of all technology like java tutorial, android, java frameworks
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India