我正在阅读垃圾收集,当我搜索字符串文字垃圾收集时,我的搜索结果令人困惑.
我需要澄清以下几点:
如果在编译时将字符串定义为文字[例如:String str = "java"]那么它是否会被垃圾收集?
如果使用实习方法[例如:String str = new String("java").intern()]那么它会被垃圾收集吗?它也将与第1点中的字符串文字区别对待.
有些地方提到只有在String卸载类时才会对文字进行垃圾收集?它是否有意义,因为我认为String不会卸载课程.
我想把字符串"aaaabbbcccaaddddcfggghhhh"分成"aaaa","bbb","cccc"."aa","dddd","c","f"等.
我试过这个:
String[] arr = "aaaabbbccccaaddddcfggghhhh".split("(.)(?!\\1)");
Run Code Online (Sandbox Code Playgroud)
但这会占用一个角色,所以用上面的正则表达式我得到"aaa",而我希望它是"aaaa"作为第一个字符串.
我该如何实现这一目标?
我一直在阅读有关Restful webservices无状态的信息.我还可以看到,大多数基于Soap的Web服务也是无状态的,如果需要可以使其成为有状态并使它们成为有状态将取决于实现.因此,如果基于SOAP的Web服务是有状态的,那么每个请求都会传递会话ID,以继续进行会话.
我的问题是为什么不能用Restful webservices做同样的事情,我想我应该能够实现一个webservice,它可以继续使用相同的会话,其中会话id由Restful webservice制作是有状态的.
所以我的问题是,RestFul webservices是一个概念,其指导原则是不使它们成为有状态的吗?或者会在Restful webservice库(如泽西岛)中检查以阻止人们这样做?
我发布此作为以下问题的解决方案,与其他人分享.如果有比这更好的答案,那么请发帖.
Shota农民有问题.他刚刚进入他新建的农舍,但事实证明他的所有设备都没有正确配置插座.作为一名现代农民,Shota拥有大量的智能手机和笔记本电脑,甚至拥有一台平板电脑供他最喜欢的牛Wagyu使用.他总共拥有N different devices.
由于这些设备具有不同的规格并且由各种公司制造,它们每个都需要不同的电流来充电.类似地,房屋中的每个出口输出特定的电流.An electric flow can be represented by a string of 0s and 1s of length L.
Shota希望能够同时为他的所有N个设备充电.巧合的是,他的新房子里正好有N个出口.为了配置来自插座的电流,有一个带L开关的主控制面板.第i个开关从房屋的每个出口翻转电流的第i位.例如,如果来自插座的电流是:
Outlet 0: 10
Outlet 1: 01
Outlet 2: 11
Run Code Online (Sandbox Code Playgroud)
然后翻转第二个开关将重新配置电流:
Outlet 0: 11
Outlet 1: 00
Outlet 2: 10
Run Code Online (Sandbox Code Playgroud)
如果Shota有一个需要流量"11"充电的智能手机,需要流量"10"充电的平板电脑,以及需要流量"00"充电的笔记本电脑,那么翻转第二个开关会让他非常高兴!
Shota聘请Misaki帮助他解决这个问题.她测量了房子出口处的电流,并发现它们都是不同的.决定Shota是否可以同时为他的所有设备充电,如果可能的话,找出需要翻转的最小开关数量,因为开关很大很重而且Misaki不想要翻转超过她需要的东西.
有人告诉我,我们不应该从同一个类中的另一个公共方法调用类的公共方法.现在我无法理解这一点,因为我没有看到任何问题.一旦方法被声明为公共方法,那么它的合同将在生命周期内被修复,因此从另一个公共方法调用它时应该没有任何问题.
所以我不确定这个陈述是否属实,或者可以从另一个公共API调用公共api [这是从设计的角度来看]?
在创建String时,我已经阅读了很多关于内存分配的相互矛盾的文章.有些文章说新的运算符在堆中创建一个String,而String literal是在String Pool [Heap]中创建的,而有些人则说新运算符在堆中创建一个对象而另一个对象在String池中创建.
为了分析这个,我编写了下面的程序,它打印了String char数组和String对象的哈希码:
import java.lang.reflect.Field;
public class StringAnalysis {
private int showInternalCharArrayHashCode(String s)
throws SecurityException, NoSuchFieldException,
IllegalArgumentException, IllegalAccessException {
final Field value = String.class.getDeclaredField("value");
value.setAccessible(true);
return value.get(s).hashCode();
}
public void printStringAnalysis(String s) throws SecurityException,
IllegalArgumentException, NoSuchFieldException,
IllegalAccessException {
System.out.println(showInternalCharArrayHashCode(s));
System.out.println(System.identityHashCode(s));
}
public static void main(String args[]) throws SecurityException,
IllegalArgumentException, NoSuchFieldException,
IllegalAccessException, InterruptedException {
StringAnalysis sa = new StringAnalysis();
String s1 = new String("myTestString");
String s2 = new String("myTestString");
String s3 = s1.intern();
String s4 = "myTestString";
System.out.println("Analyse …Run Code Online (Sandbox Code Playgroud) 我有一个Maven项目,我需要从多个wsdl文件生成java类.我已经分析了使用maven插件axistools-maven-plugin,cxf-codegen-plugin但我遇到的问题是来自不同wsdl的Java文件应该转到不同的包.
我已经检查了这个链接:http://decimalsolutions.blogspot.in/2011/10/wsdl2java-maven2.html但它并没有解决我的问题.
怎么做到这一点?
我在使用字符串创建和检查其哈希码进行测试时发现了一个有趣的案例.
在第一种情况下,我使用复制构造函数创建了
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
String s1 = new String("myTestString");
String s3 = s1.intern();
System.out.println("S1: " + System.identityHashCode(s1) + " S3:"
+ System.identityHashCode(s3));
}
}
Run Code Online (Sandbox Code Playgroud)
上述代码的输出是:
S1:816115710 S3:478684581
这是预期的输出,因为实习字符串从字符串池中选择引用,而s1选择新对象的引用.所以他们的身份哈希码是不同的.
现在,如果我使用char数组创建String,那么我会看到一些奇怪的行为:
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
char[] c1 = { 'm', 'y', 'T', 'e', 's', 't', 'S', 't', 'r', 'i', 'n',
'g' };
String s5 = new String(c1);
String …Run Code Online (Sandbox Code Playgroud) 我一直在阅读有关threadlocal和有用的场景.我喜欢这个概念,但想知道它与克隆有什么不同?
因此,threadlocal将返回变量的新副本,这意味着我们不必使用同步.一个很好的例子是SimpleDateFormat对象,它不是线程安全的,而ThreadLocal提供了一种很好的使用方法.但为什么我们不能简单地创建一个新的varibale使用克隆副本?
与克隆相比,ThreadLocal类提供的增值是多少?
我在我的代码中使用了一个接口已经存在了很长时间,很多类已经实现了它.现在我必须为这个接口添加一个新方法用于新类[旧类不需要新方法].因此,在许多地方已经建议我可以扩展旧接口并使用新方法创建新接口.现在我的问题是使用接口实现的app启动器只引用基接口并使用基接口我不能在新接口中调用方法.
baseInterface is extended by newInterface
Class Applauncher{
baseInterface b;
}
Run Code Online (Sandbox Code Playgroud)
可以看出,我无法在Applauncher类的"newInterface"中调用新方法.
我想要一个不会改变旧实现的解决方案.
我在sql power arch中制作了一个数据库的ER图。我想在 oracle db 中创建整个表模式,所以首先我必须连接oracle11g db 和 sql power architect。
错误行是, - jdbc DRIVER " oracle.jdbc.oracleDriver " not found
我有这样的字符串"aaaabbbcccaddddcfggghhhh",我想删除重复的字符得到像这样的字符串"abcadcfgh".
对此的简单实现将是:
for(Character c:str.toCharArray()){
if(c!=prevChar){
str2.append(c);
prevChar=c;
}
}
return str2.toString();
Run Code Online (Sandbox Code Playgroud)
有没有可能有更好的实现可能正在使用正则表达式?