首页 > 其他分享 >包装类、String

包装类、String

时间:2024-02-25 23:03:38浏览次数:24  
标签:String 包装 System new println Integer out

包装类

包装类的分类

  1. 针对八种基本数据类型相应的引用类型一包装类
  2. 有了类的特点,就可以调用类中的方法



包装类和基本数据类型转换

课堂测试

下面的代码是否正确,为什么?

Double d = 100d;
Float f = 1.5f;
Object obj1 = true? new lnteger(1) : new Double(2.0);//三元运算符[是一个整体] 一真大师
System.out.println(obj1);  //输出1.0而不是1
Object obj2;
if(true){
  obj2 = new Integer(1):
}
else{
  obj2 = new Double(2.0):
}
System.out.println(obj2);  //输出1

面试题

看看下面代码,输出什么结果?为什么?

public class Homework04 {
    public static void main(String[] args) {
        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i==j);   //False

        Integer m = 1;  //底层Integer.valueOf(1);
        Integer n = 1;  //底层Integer.valueOf(1);
        //所以这里主要看范围-128~127就是直接返回缓存里的Integer对象
        //超出范围则new一个Integer对象
        System.out.println(m==n);   //True

        Integer x = 128;  //底层Integer.valueOf(128);
        Integer y = 128;  //底层Integer.valueOf(128);
        System.out.println(x==y);   //False
    }
}
Integer i1 = new Integer(127):
Integer i2 = new Integer(127);
System.out.println(i1==i2);//F

Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3==i4);//F

Integer i5 = 127;//底层Integer.value0f(127)
Integer i6 = 127;
System.out.println(i5==i6);//T

Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7==i8);//F

Integer i9 = 127;//底层Integer.value0f(127)
Integer i10 = new Integer(127);
System.out.println(i9==i10);//F

//只要有基本数据类型,判断的是值是否相同
Integer i11 = 127;
int i12 = 127;
System.out.println(i11==i12);// T

Integer i13 = 128;
int i14 = 128;
System.out.println(i13==i14);//T

String类

  1. String 对象用于保存字符串,也就是一组字符序列
  2. 字符串常量对象是用双引号括起的字符序列。例如:"你好"、"12.97"、"boy"等
  3. 字符串的字符使用Unicode字符编码,一个字符占两个字节(不区分英文和汉字)
  4. String类较常用构造方法(其它看手册)
  • String s1 = new String0:
  • String s2 = new String(String original)
  • String s3 = new String(char[] a):
  • String s4 = new String(char[] a,int startlndex,int count)

String类实现了Serializable接口(说明可以串行化,进行网络传输);实现了Comparable接口(说明String对象可以比较);实现了CharSequence接口;继承了Objecet类
String底层实际上是用final char value[] 来存放字符串的。final是指value[]的地址不能改变,但是数组内容可以改变。

两种创建String对象的区别

方式一: 直接赋值 String s ="hsp”;
方式二: 调用构造器 String s2 = new String("hsp”);

  1. 方式一: 先从常量池查看是否有”hsp”数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址
  2. 方式二: 先在堆中创建空间,里面维护了value属性,指向常量池的hsp空间。如果常量池没有"hsp"则重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址
  3. 画出两种方式内存分布图

字符串的特性

  1. String是一个final类,代表不可变的字符序列
  2. 字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的


创建了2个字符串常量对象,s1指向常量池"hello",s1又指向常量池"haha".s1只是存放String对象的地址,可以被修改。String对象内容不能修改,"hello"不能改为"haha",而是s1从存放hello的地址改为了存放haha的地址。

创建了几个对象?

3个

总结:常量相加”ab“+”cd“看的是池、变量相加a+b,是在堆中

String类的常见方法

String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilder 和 StringBuffer 来增强String的功能并提高效率。[后面我们还会详细介绍StringBuilder 和 StringBuffer]

StringBuffer类

String VS StringBuffer

  1. String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低 //private final char valuell;
  2. StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用更新地址,效率较高//char[] value; // 这个放在堆

String拼接

如果是常量之间的拼接:"happy"+"wei",结果就是池里的"happywei";如果是变量的拼接"happy"+s1(s1指向池里的"wei"),则结果不是常量池里的"happywei",而是堆中的对象,对象里的value成员指向池里的"happywei"。

标签:String,包装,System,new,println,Integer,out
From: https://www.cnblogs.com/tigerWei/p/17962817

相关文章

  • C# 的显示转换 *.Parse(string) Convert.ToInt32(double value)
    //显式转换(类型)///(int)表示使用强制的显示转换,是一种类型转换,C#默认的整形是int32,///因此使用此方法转成int32不遵循四舍五入,直截取整数部分///(int)5.12结果是5///Int.Parse()指把string类型转换int......
  • c# 格式化数字 ToString方法使用总结
    decimala11=100100.01m;decimala12=100100.51m;decimala13=100100.50m;decimala14=100100.00m;decimala15=100100.55m;decimala16=100100.54m;Console.WriteLine("#.##输出");Console.WriteLine(a11.ToString("#.##"));Console.......
  • (17)Lazarus学习之StringGrid1
    01]下拉ComboBox1选择  参考:C:\lazarus\examples\gridexamples\gridcelleditorprocedureTForm1.StringGrid1SelectEditor(Sender:TObject;aCol,aRow:Integer;varEditor:TWinControl);beginif(aCol=3)and(aRow>0)thenbegin//哪些单元格显示Comb......
  • golang中的类型断言,解释.(float64)和.(string)
    在Go语言中,. 后跟括号中的类型名称(如 .(float64) 或 .(string))通常出现在类型断言(typeassertion)的上下文中。类型断言用于检查一个空接口(interface{})值是否包含特定的类型,如果是,则将其转换为该类型。类型断言的语法如下:value,ok:=x.(T)其中 x 是一个 interface{}......
  • 山海经&&Atcoder Alternating String (线段树)
    前言:为什么把他们放在一起?因为我发现把pushup向上回溯放结构体类型函数里比较方便并且这两题确实也有相同思想山海经这题分三种情况左子树前缀和+右子树前缀和2.右子树后缀和与右总区间+左子树3.左区间最大子段与右区间最大子段与左后缀与右前缀特别要注意......
  • vue中花括号表达式,string类型除以number类型返回NaN值
    bug:数据为0时,el-progress的color还是有颜色,应该是没有颜色的第一步解决:设置动态color<el-progress:show-text="false":percentage="(oilCarOccupationNum/totalNum)*100":color="oilCarOccupationNum?'......
  • 反射突破String不可变
    try{Stringstr="yyg";System.out.println("str="+str+",唯一性hash值="+System.identityHashCode(str));ClassstringClass=str.getClass();//获取String类中的value属性Fieldfield=stringClass.getDeclaredFiel......
  • C++ STL 容器-string类型
    C++STL第一部分-容器STL的介绍C++的STL分为六大部分容器分为String容器例子1std::stringstr1,str2,str3,str4;str1.assign("abcd");//给str1赋值abcdstr2.assign("abcd",3);//获取abcd中的3个,从0到2str3.assign(str1);//获取str1//注意str3()和str3.a......
  • [Rust] Char vs String
    usestd::path::PathBuf;useclap::Parser;#[derive(Parser,Debug)]#[clap()]pubstructOpts{pubargs:Vec<String>,#[clap(short='c',long="config")]pubconfig:Option<PathBuf>,#[clap(short='p'......
  • (ColumnTypes[number] & { editable?: boolean; dataIndex: string; })[]
    (ColumnTypes[number]&{editable?:boolean;dataIndex:string;})[]在TypeScript中,这段类型定义可以分解理解:ColumnTypes[number]:首先,如果ColumnTypes是一个数组类型(如Column[]),那么ColumnTypes[number]就是获取数组中的元素类型。在TypeScript中,number表示数组......