A. java代码中的变量类型为什么必须是String类型 为什么不能改成其他类型
第一,String是一个类,format是这个类下面的一个静态方法。char不是类是基本类型,基内本类型没有方法容;
第二,字符串就是String类型,char代表一个字符而不是一串字符。
学语言,就要遵守这门语言的语法规则,不能自己随便创造。
B. java String类型变量比较问题!!懂得进来下!
这是java的一种优化
创建String类型的变量有两种方法
String
st
=
"相等"
String
st
=
new
String("相等");
第一种方式,会把"相等"这个字符串放在字符缓冲区中,如果有出现一个String
sr
=
"相等",就直接把缓冲区中的地址赋给sr,就会出现
st
与
sr
指向的内存地址相同的。
用第二种方式,就会各自开辟一个内存地址,不会出现上面的问题。
C. java中string型变量判断是否为空哪个正确
首先就要确保他不是null,然后再判断他的长度。
String str = xxx;
if(str != null && str.length() != 0) { }
这种做法是安全的,首先他会判断str是否为空,如果为空那么if就直接退出了,就不会再判断后面的str.length() != 0了,这是JAVA的&&特性,也许其他语言也是这样。
String字符串判定是否为空方法总结
判断一个字符串str不为空的方法有:
1. str!=null;(前提条件)
2. “”.equals(str);
3. str.length()!=0;
注意:length是属性,一般集合类对象拥有的属性,取得集合的大小。
例如:数组.length就是取得数组的长度。
length()是方法,一般字符串类对象有该方法,也是取得字符串长度。
例如:字符串.length();
说明:
1. null表示这个字符串不指向任何的东西,那么没有是否为空的问题,因为引用的实例对象都没有。这时候如果你调用它的方法,那么就会出现空指针异常。
2.”“表示它指向一个长度为0的字符串,这时候调用它的方法是安全的。
3. null不是对象,”“是对象,所以null没有分配空间,”“分配了空间,例如:
String str1 = null; str引用为空
String str2 = “”; str应用一个空串
str1还不是一个实例化的对象,儿str2已经实例化。
对象用equals比较,null用等号比较。
如果str1=null;下面的写法错误:
if(str1.equals(“”)||str1==null){ }
正确的写法是 if( ( str1==null ) || str1.equals(“”)){
//先判断是不是对象,如果是,再判断是不是空字符串;而且顺序不能乱 }
D. java中方法对于String类型全部变量的操作
函数中在查找变量时,先查找的是局部变量,由于change函数中str变量和类变量相同,所以,str="com"赋值是,系统认为是对string str中的str赋值,而不是类属性中的str,而str1和str2就不会产生这种误会,在str="com"前面加一个限定this.str="com"即可消除这种歧义。
E. java中string后面如何加其他string变量
java中string类型的变量的值是无法改变的,如果想要在字符串后面加其他字符串,需要定义StringBuffer或者StringBuilder变量,StringBuffer和StringBuilder变量与String的功能基本一致,只不过值可以改变,它们是java后面版本升级加入用来完善String的
F. java中string类型变量的默认初始值是什么
java中string类型变量的默认初始值是为null。
G. 在Java中String变量的最大长度是多少
u2是无符号的16位整数,因此理论上允许的string literal的最大长度是2^16-1=65535。然而实际测试表明,允许的最大长度仅为65534,超过就编译错误了,有兴趣可以写段代码试试,估计是length还不能为0。
H. JAVA中String类型变量的比较
比较内容用equals这种抄说法其实袭不完全正确的,因为String重写了Object的equals方法,重写的这个方法就是比较字符串的内容。
如果你用自己定义的对象的equals方法,则比较的是对象的地址是否相同,这是Object的默认比较方式。
所以你只要记住,对于字符串来说,都要用equals来比较,因为我们不可能会去比较一个String的地址是否相同,没有任何意义。
I. Java String变量问题
第一个其实你是建立个一个object,object之间相比较是不能用==的,应该用equals,你可以把a==b换成a.equals(b)那么打印出来的结果就是b srting equals a string
而第二个你建立的其实就是一个变量,相同类型的变量之间是可以用==来判断布尔值的
下面回答你的问题
1你的理解是stack里有指针变量,java是没有指针的。
2获得string的hashcode,可以看一下java的api, class string里有个method叫hashCode()
public int hashCode()
所以直接System.out.println(a.hashCode());
就可以显示出来
你可以看看这一篇文章,作者讲解的很详细
http://www.cnblogs.com/fzzl/archive/2009/04/01/1427563.html
J. Java中String的变量为什么不是String对象
比较懒,即网上复制一段给你吧,这个比我自己将要详细很多。
字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生。一、从根本上认识java.lang.String类和String池首先,我建议先看看String类的源码实现,这是从本质上认识String类的根本出发点。从中可以看到:1、String类是final的,不可被继承。public final class String。2、String类是的本质是字符数组char[], 并且其值不可改变。PRivate final char value[];然后打开String类的API文档,可以发现:3、String类对象有个特殊的创建的方式,就是直接指定比如String x = "abc","abc"就表示一个字符串对象。而x是"abc"对象的地址,也叫做"abc"对象的引用。4、String对象可以通过“+”串联。串联后会生成新的字符串。也可以通过concat()来串联,这个后面会讲述。6、Java运行时会维护一个String Pool(String池),JavaDoc翻译很模糊“字符串缓冲区”。String池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。而一般对象不存在这个缓冲池,并且创建的对象仅仅存在于方法的堆栈区。5、创建字符串的方式很多,归纳起来有三类:其一,使用new关键字创建字符串,比如String s1 = new String("abc");其二,直接指定。比如String s2 = "abc";其三,使用串联生成新的字符串。比如String s3 = "ab" + "c"; 二、String对象的创建String对象的创建也很讲究,关键是要明白其原理。原理1:当使用任何方式来创建一个字符串对象s时,Java运行时(运行中JVM)会拿着这个X在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串s,否则,不在池中添加。原理2:Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。原理3:使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢了!但绝不会在堆栈区再去创建该String对象。原理4:使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象。另外,String的intern()方法是一个本地方法,定义为public native String intern(); intern()方法的价值在于让开发者能将注意力集中到String池上。当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。三、不可变类不可改变的字符串具有一个很大的优点:编译器可以把字符串设置为共享。 不可变类String有一个重要的优点-它们不会被共享引用。是这样的,JAVA为了提高效率,所以对于String类型进行了特别的处理---为string类型提供了串池 定义一个string类型的变量有两种方式: string name= "tom "; string name =new string( "tom ") 使用第一种方式的时候,就使用了串池, 使用第二中方式的时候,就是一种普通的声明对象的方式 如果你使用了第一种方式,那么当你在声明一个内容也是 "tom "的string时,它将使用串池里原来的那个内存,而不会重新分配内存,也就是说,string saname= "tom ",将会指向同一块内存 另外关于string类型是不可改变的问题: string类型是不可改变的,也就是说,当你想改变一个string对象的时候,比如name= "madding " 那么虚拟机不会改变原来的对象,而是生成一个新的string对象,然后让name去指向它,如果原来的那个 "tom "没有任何对象去引用它,虚拟机的垃圾回收机制将接收它。 据说这样可以提高效率!!!
最后总结下,String是一个很特殊的类,它有一个字符串池。