String 及其数组的相关问题

由其他类型转String一般用三种方法

方法1:采用 Object.toString()方法
请看下面的例子:
Object object = getObject();
System.out.println(object.toString());
在这种使用方法中,因为java.lang.Object类里已有public方法.toString(),所以对任何严格意义上的java对象都可以调
用此方法。但在使用时要注意,必须保证object不是null值,否则将抛出NullPointerException异常。采用这种方法时,通常派生
类会覆盖Object里的toString()方法。

方法2:采用类型转换(String)object方法
这是标准的类型转换,将object转成String类型的值。使用这种方法时,需要注意的是类型必须能转成String类型。因此最好用
instanceof做个类型检查,以判断是否可以转换。否则容易抛出CalssCastException异常。此外,需特别小心的是因定义为
Object 类型的对象在转成String时语法检查并不会报错,这将可能导致潜在的错误存在。这时要格外小心。如:
Object obj = new Integer(100);
String strVal = (String)obj;

在运行时将会出错,因为将Integer类型强制转换为String类型,无法通过。但是,
Integer obj = new Integer(100);
String strVal = (String)obj;
如是格式代码,将会报语法错误。
此外,因null值可以强制转换为任何java类类型,(String)null也是合法的。

方法3:采用String.valueOf(Object)
String.valueOf(Object)的基础是Object.toString()。但它与Object.toString()又有所不同。在前
面方法1的分析中提到,使用第一种时需保证不为null。但采用第三种方法时,将不用担心object是否为null值这一问题。为了便于说明问题,我们
来分析一下相关的源代码。Jdk里String.valueOf(Object)源码如下:
  /**
   * Returns the string representation of the Object argument.
   *
   * @param  obj  an Object.
   * @return if the argument is null, then a string equal to
   *     "null"; otherwise, the value of
   *     obj.toString() is returned.
   * @see   java.lang.Object.toString()
   */

  public static String valueOf(Object obj) {

    return (obj == null) ? "null" : obj.toString();
}
从上面的源码可以很清晰的看出null值不用担心的理由。但是,这也恰恰给了我们隐患。我们应当注意到,当object为null时,String.valueOf(object)的值是字符串"null",而不是null!在使用过程中切记要注意。试想一下,如果我们用

if(String.valueOf(object)==null)
{
  System.out.println(“传入的值是null!");
}
这样的语句将可能会发生什么问题。再想一下,向控制台输出时,在视觉上如下语句在执行的结果上有什么不同:
System.out.println(String.valueOf(null));
System.out.println(null);
我们看到的输出将是一模一样的东西:null,但它们意义相同吗?

判断一个字符串为空

s为一个字符串,判断它为空的方法:

if   (null==s ||"".equals(s))   {

......

}

注意:这里的null==s和"".equals(s)不要写成s==null和s.equals(s),因为""这个值是已经确定的,预知
的,而s是未知的,所以用得不小心的时候s.equals("")就会出现nullpoint异常。在这里虽然不会,因为前面有if(null==s),
但是习惯跟在那里使用没有关系的。不一定的equals方法,包括其它很多处理,如果用确定的值处理问题会比未确定的处理少很多bug。

时间: 2024-10-24 20:17:16

String 及其数组的相关问题的相关文章

由String引出的若干相关问题

一.参数传递 Java中的变量类型分为基本数据类型和引用数据类型.引用数据类型存放的是对象实例的地址,一个对象可以有多个引用,即这些引用存放的都是该对象的地址.(基本类型变量和引用类型变量存放在栈(stack)中,对象存放在堆(heap)中) 在进行参数传递时,不管参数是基本类型还是引用类型,形参(parameter)都是实参(argument)的一个拷贝.具体来说,当传递基本类型时,形参和实参是两个地址不同的变量,虽然变量中存放的值相同,所以改变形参的值,不会影响到实参.传递引用类型时,形参和

数组的相关知识

数组默认值对照图 数组类型 数组元素的默认值 byte.short.int.long 0 float.double 0.0 char '\0' boolean false Object.type null 数组的相关操作: 1.数组长度 语法格式: 数组名.length 2.数组填充 语法格式:Arrays.fill(数组名, 值)    Arrays.fill(数组名,开始下标,结束下标,值) 注:在使用Arrays的fill方法对数组进行赋值时,可以指定起始位置begin和终止位置end,这

php对二维数组进行相关操作(排序、转换、去空白等)

php对二维数组进行相关操作(排序.转换.去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04 这篇文章主要介绍了php对二维数组进行相关操作,包括php对二维数组排序.转换.去空白,以及去重复值等,感兴趣的小伙伴们可以参考一下 技巧提示: ? 1 2 3 4 5 6 7 8 9 array_keys($array) //返回所有键名   array_values($array) //返回所有键值    $result=array_reverse($inp

字符串数组初始化相关问题总结

C字符串数组初始化相关问题总结 在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串.总结起来有以下三种方式: (1) char str[10]=""; (2) char str[10]={'\0'}; (3) char str[10]; str[0]='\0'; 第(1)(2)种方式是将str数组的所有元素都初始化为'\0',而第(3)种方式是只将str数组的第一个元素初始化为'\0'.如果数组的size非常大,那么前两种方式将会造成很大的开销. 所以,除非必要(

hdu 5030 Rabbit's String(后缀数组&二分)

Rabbit's String Time Limit: 40000/20000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 288    Accepted Submission(s): 108 Problem Description Long long ago, there lived a lot of rabbits in the forest. One day, the

hdu 5030 Rabbit's String(后缀数组)

题目链接:hdu 5030 Rabbit's String 题目大意:给定k和一个字符串,要求将字符串拆分成k个子串.然后将每个子串中字典序最大的子串选出来,组成一个包含k个字符串的集合,要求这个集合中字典序最大的字符串字典序最小. 解题思路:网赛的时候试图搞了一下这道题,不过水平还是有限啊,后缀数组也是初学,只会切一些水题.赛后看了一下别人的题解,把这题补上了. 首先对整个字符串做后缀数组,除了处理出sa,rank,height数组,还要处理处f数组,f[i]表示说以0~sa[i]开头共有多少

POJ 3729 Facer’s string (后缀数组)

题目大意: 串1中有多少个后缀和 串2中的某个后缀 的lcp 为 k 思路分析: 先找出 长度至少为k的对数有多少. 再找出 至少为k+1的有多少 然后相减. #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <map> #include <string> #define maxn 110005 using na

转换实体对象 与string转化数组

/// <summary> /// 转换实体对象 /// </summary> /// <typeparam name="T1">转化的实体</typeparam> /// <typeparam name="T2">转换后的实体</typeparam> /// <param name="t1"></param> /// <param name=&

Javascript的String和数组

本章讨论Javascript的String和数组. 所有语言中对String和数组的操作是很普遍的,掌握好它们的操作,会让我们在lu代码的时候事半功倍. 一.String String顾名思义,就是字符串的意思 var  string="Iamhandsome"; 就创建了一个名为string的字符串,它的值为Iamhandsome. String是Javascript基本数据类型之一.String也可以看作是Javascript的一个对象.对象有很多方法的 下面来看看它的方法,由于方