2 u010775468 u010775468 于 2016.04.24 16:03 提问

关于java中的String类的方法的问题

新人初学java,今天遇到这样一个问题:
我知道在java中,String是一个字符串类,但是它的一些问题有点疑惑不解
1.定义数据类型
String str;
我知道这是定义了一个str变量
但是却又出现了一个问题;
Sting str = new String(c,0,4) // c是数组
我查了下jdk
文档,Sring类当中有很多方法,我知道调用其中的的方法必须要实例化,也就是创建一个对象,但是我不明白就是为什么在声明变量的时候不用new呢,应该也是要分配空间去存放这个变量的呀,这是为什么呢,麻烦各位解答了,在下谢谢各位了

4个回答

CSDNXIAOC
CSDNXIAOC   2016.04.24 16:12

此问题在项目中被发现,经查看JDK源码(JDK1.6),String类的public String substring(int beginIndex, int endIndex)的实现让我很意外。

想重现这个场景很容易,请看代码。

 

 

[java] view
plaincopy

import&n......
答案就在这里:String类substring方法导致的Java内存泄漏问题
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.04.24 18:14
  你的第一个代码肯定是在类定义时声明的类的成员变量,所以允许不用初始化然后在类的构造函数中初始化这个成员变量的。如果是在方法中声明变量必须初始化要么直接new创建对象,要么初始化为null。这是Java的语法特征。
u010775468
u010775468 谢谢,有一点不懂的是,这第一个str是不是可以把它和int等其他基本数据类型看成是一样的,在定义之初就已经分配好了内存,所以不需要再new了,然后只要是String类型的,是不是可以直接调用其中的方法?
大约 2 年之前 回复
qq_16659099
qq_16659099   2017.05.30 18:53

声明的时候不分配内存,只是跟你说一下,创建对象才会分配

qq_16659099
qq_16659099   2017.05.30 18:54

变量你有没有初始化,怎么给你分配内存

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
介绍java中String类的方法
介绍java中String类的方法,String类实例的创造
java中那些关于String的面试题
1、String是基本数据类型吗?String是java lang包下的一个类,不像基本数据类型int long等。 String是引用数据类型,不是基本数据类型。2、String是可变的吗?所谓不可变类,是指当创建了这个类的实例后,就不允许修改它的属性值。在java中,所有基本类型的包装类,如Integer和Long类,都是不可变类,java.lang.String也是不可变类,虽然他不是基本类
Java 字符串类的常用方法【java.lang.String】
public class StringTest { static class sss{ String s3="core java"; } class sss2{} public static void main(String[] args){ String s1="core java"; String s2="Core Java"; StringTest.sss ss=new St
java中String类常用方法的使用与实例
String类中提供了丰富的用于操作字符串的方法。 int indexOf(String str) 该方法用于返回当给定字符串在当前字符串中的位置,若当前字符串不包含给定字符串则返回-1。 重载的方法 int indexOf(String str,int formIndex),从指定下标处(包含)查询子串,返回返回当给定字符串在当前字符串中的位置,若当前字符串不包含给定字符串则返回-1。
Java-String类常见面试题
Java-String类常见面试题
Java String类的练习和常用方法
第一个比较常用的string类中的.length( );该方法求字符串中的长度/下面我们举个例子public class Test { public static void main(String[] args) { String str1 = "www.csdn.net"; int a = str1.length(); System.out.
Java技术——你真的了解String类的intern()方法吗
说实话我本来想总结一篇Android内存泄漏的文章的,查阅了很多资料,发现不得不从Java的OOM讲起,讲Java的OOM又不得不讲Java的虚拟机架构。在JVM架构一文中也有介绍,在JVM运行时数据区中的方法区有一个常量池,但是发现在JDK1.6以后常量池被放置在了堆空间,因此常量池位置的不同影响到了String的intern()方法的表现。深入了解后发现还是值得写下来记录一下的。
Java Object类中equals()方法与String类中equals()方法的比较
public class AccountTester2 { public static void main(String[] args) { BankAccount2 b1 = new BankAccount2("Bob",100.00f,Grade2.General); BankAccount2 b2 = new BankAccount2("Bob",100.00f,Grade2.Ge
Java 深究字符串String类(2)之重写toString()方法无意识递归
Java中每个类都是Object的子类,Object 有toString方法,所以标准容器自然都有 如果希望toString方法以打印对象内存地址,可以直接打印 public static void main(String[] args) { Two t = new Two(); System.out.println(t); }输出: Two@610
java 的String类的substring方法,易犯的错误
-